2016-04-20 10 views
2

ボタンをクリックすると、自分で書かれたAPIにAJAX呼び出しが行われます。ボタンをクリックすると、Javascriptファイルはクリックされたオブジェクトから2つのdata属性を取得し、URLとともに送信します。この2つの変数は、まだ実行されているSQL文のwhere句で使用されます。Laravelクエリで変数値の代わりに疑問符が返される

呼び出しが行われると、APIリクエストを処理するPHPスクリプトは、Input::get('data-attribute-one'))Input::get('data-attribute-two'))で2つの変数を受け取ります。これら2つの属性を出力すると、正しい値が表示されます。

しかし、私はそうのように、私のクエリのWHERE句に変数を入れたとき:

$fans = Sensor::where('fan_number', '=', $dataAttributeOne)->where('created_at', '>=', $this->now->subHours(6))->get(); 

は結果が返されません。だから私は、クエリをチェックする->toSql()->get()を交換し、それがコードのこの奇妙なラインで私を提示:

Object {fans: "select * from "myawesomedatabasetable" where "fan_number" = ? and "created_at" >= ?"} 

$dataAttributeOne取り出さdata-atribute$this->now->subHours(6)は、現在の時刻マイナス6時間です。私が出力するとき、それはデータベースのcreated_atの値と同じフォーマットであり、PhpmyadminのSQLステートメントにハードコードすると、そのクエリはチャームのように実行されます。だから問題はない。

私の質問は、クエリが実行されるときに変数が疑問符に変わる理由と、これをどのように解決するのですか?

ありがとうございます!

+1

[プリペアドステートメント](https://en.wikipedia.org/wiki/の一環として、あなたの質問 '彼らはプレースホルダている場合、クエリexecutes'なぜ変数が疑問符に回っているに簡単な答えPrepared_statement)それはアレクセイがあなたの解決策であると答えたように、それは** **実行されていません。 – ash

答えて

4

これはちょうどtoSql()の仕組みです。このメソッドはデバッグに使用されます。

https://scotch.io/tutorials/debugging-queries-in-laravel

+0

私は今、非常にばかげていると感じています。しかし、私はリンクを読んで、Debugbarをインストールし、準備された声明のどの部分が間違っていたのか把握しました。ありがとう! –

+0

SQLクエリをデバッグする別の方法は、実行したすべてのクエリを記録するようにmysqlデバッグを有効にすることです。参照:http://stackoverflow.com/questions/6479107/how-to-enable-mysql-query-log – Mysteryos

関連する問題