3

とても簡単だと思いますが、例が見つかりませんでした。

ユーザーのログインをログに記録するためにLaravelアプリケーションで流暢を使用しているため、独自の認証ドライバーを作成しましたが、生データと未生データが混在する流暢なクエリに問題があります。次を見てください。

DB::table('logins')->insert(array(
    'login_email' => $arguments['email'],
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'),
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'),
    'login_result' => (bool)$success
));

その原因:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?)' at line 1

SQL: INSERT INTO `cs_logins` (`login_email`, `login_date`, `login_ip`, `login_result`) VALUES (?, UNIX_TIMESTAMP(NOW()), INET_ATON(127.0.0.1), ?)

Bindings: array (
  0 => false,
)

だから私は次のことをしました:

DB::table('logins')->insert(array(
    'login_email' => DB::raw("'".$arguments['email']."'"),
    'login_date' => DB::raw('UNIX_TIMESTAMP(NOW())'),
    'login_ip'=> DB::raw('INET_ATON('.$_SERVER['REMOTE_ADDR'].')'),
'login_result' => DB::raw((bool)$success)
));

しかし、Dayle Rees が言うように、見栄えが悪い場合はフレームワークに含まれていないので、ここで何が欠けているのか知りたいのです。

4

2 に答える 2

3

雄弁に使う

まず第一に、まだ行っていない場合は、Loginのモデルを作成して、laravel 独自の ORM eloquentを使用できるようにします。Eloquent を使用すると、シンプルでありながら強力なクエリを非常に表現力豊かな方法で作成できます。

これで、次の 2 つのオプションのいずれかを実行できます。

$logins = Login::create(array('email' => 'example@gmail.com'));

または、あなたの場合はもっとエレガントかもしれません:

$login = new Login;

$login->email = 'example@gmail.com';
$login->login_date = DB::raw('UNIX_TIMESTAMP(NOW())');

$login->save();

詳細については、雄弁なドキュメントを参照してください。

于 2012-12-20T21:28:55.103 に答える
0

OK、「?」のように見えることは気にしないでください。疑問符は、準備されたステートメントを作成するその部分に流暢が到達しなかったことを意味しました。私はLaravelとFluentを初めて使用し、疑問符はエラーがクエリのその部分にあることを意味すると思いました。

于 2012-12-20T21:06:54.977 に答える