PHP PDO选择任何值不返回任何内容

时间:2017-10-29 12:02:39

标签: php mysql pdo

$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"

1 个答案:

答案 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注入风险。