2017-10-29 15 views
0
$sql = $baglanti->prepare(" 
    SELECT inv_id, item_id 
    FROM inventory 
    WHERE item_id = ANY (
     SELECT item_id 
     FROM inventory 
     WHERE :uzunwhere 
    ) AND item_color = ANY (
     SELECT item_color 
     FROM inventory 
     WHERE :uzunwhere 
    ) AND item_quality = ANY (
     SELECT item_quality 
     FROM inventory 
     WHERE :uzunwhere 
    ) AND item_location = :loc 
    AND (character_id = :cid OR :cid = :owner) 
"); 

$sql->execute(array(
    ':uzunwhere' => $whereKosul, 
    ':loc' => $mekanid, 
    ':cid' => $charID, 
    ':owner' => $ishome['place_ownerID'] 
)); 
$bulunanlar = $sql->fetchAll(/*PDO::FETCH_ASSOC*/); 
$sayi = $sql->rowCount(); 
echo $sayi; 

結果をキャッチすると、$ sayiは私に0を表示します。PHPの「ANY」のようなクエリ構文はありますか?PHP PDO任意の値を選択しても何も返されません

また、このコードをクエリランナー経由でMySQLワークベンチで試しました。そこに問題はありません。

$uzunWhereは、コードの上のif文で変更可能な変数です。ここにその例を示します。

$uzunWhere = "inv_id = 111 OR inv_id = 95" 
+0

[バインドできる部分を照会](https://phpdelusions.net/pdo#bindable) –

答えて

0

SQLパラメータは式にすることはできません。 単一スカラー値の代わりに、数値定数、引用符付き文字列定数、または日付定数のようなパラメーターを使用してください。

式の他の部分、表または列の識別子、SQLキーワード、または値のリストなどのパラメータは使用できません(リスト内の値ごとに別のパラメータを使用しない限り)。

変数$uzunWhereの場合は、クエリパラメータを使用せずに変数に文字列を挿入する必要があります。

$sql = $baglanti->prepare(" 
    SELECT inv_id, item_id 
    FROM inventory 
    WHERE item_id = ANY (
     SELECT item_id 
     FROM inventory 
     WHERE $uzunWhere 
    ) AND item_color = ANY (
     SELECT item_color 
     FROM inventory 
     WHERE $uzunWhere 
    ) AND item_quality = ANY (
     SELECT item_quality 
     FROM inventory 
     WHERE $uzunWhere 
    ) AND item_location = :loc 
    AND (character_id = :cid OR :cid = :owner) 
"); 

これは、あなたが、それはSQLインジェクションのリスクを導入しないことを確認するために、$uzunWhereを定義するコード内の他の予防措置を講じなければならないことを意味します。

関連する問題