$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”?
我也通过查询运行器在MySQL工作台中尝试了这段代码。那里没有问题。
$uzunWhere
是一个变量,可以使用代码上方的if语句进行更改。这是一个例子:
$uzunWhere = "inv_id = 111 OR inv_id = 95"
答案 0 :(得分: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)
");
这意味着您必须在定义$uzunWhere
的代码中采取其他预防措施,以确保它不会引入SQL注入风险。