3

idフィールド、sender_idを含むドキュメント テーブルがありreceiver_idU12、U13、U14 のreceiver_idような文字列値が含まれています。次に、レコードを取得するためのクエリを作成する方法について説明します。receiver_iduser_iduser_idU13

私のクエリは次のとおりです。

$selDoc="SELECT * FROM documents WHERE sender_id='U".$_SESSION['userId']."' OR  "U".$_SESSION['userId']." IN (receiver_id) ORDER BY id DESC";

しかし、「where句」に不明な列「U13」というエラーが表示されました

4

2 に答える 2

4

文字列の連結が台無しになっています。次のようにする必要があります:(さらに簡略化)

$selDoc="SELECT * FROM documents WHERE 'U".$_SESSION['userId']."' IN (senderID,receiver_id) ORDER BY id DESC";

上記のステートメントを解析すると、次のようになります。

SELECT * 
FROM   documents 
WHERE  'UXX' IN (senderID,receiver_id)  // where XX is the userID
ORDER  BY id DESC

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-20T06:05:17.543 に答える
1

そこに引用符がありません。さらに、SQL インジェクションの問題を回避するために、クエリでバインド変数を使用することを検討する必要があります (検索する値を変数に割り当て、クエリでプレースホルダーを使用する)。知るために!)

于 2013-04-20T06:07:11.673 に答える