这个准备好的SQL语句出了什么问题?

时间:2017-03-28 05:05:31

标签: php

这似乎不起作用,没有错误,只是没有返回任何内容:

$stmt = $pdo->prepare('SELECT * FROM deadfrontier.items WHERE item LIKE "?"');
    $stmt->execute([$test]);
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['item'];
    }

但是,这样做:

$stmt = $pdo->prepare('SELECT * FROM deadfrontier.items WHERE item LIKE "RG6"');
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['item'];
    }

我做错了什么?感谢。

(编辑:此处为$test变量:$test = "RG6";

2 个答案:

答案 0 :(得分:0)

我从来都不是PHP专家(虽然@Barmar),但我认为你不需要在准备好的声明中引用逃避你的字符串。处理字符串的转义是您希望使用预准备语句的原因之一。相反,只需使用?来处理字符串参数,让PDO为您完成工作:

$stmt = $pdo->prepare('SELECT * FROM deadfrontier.items WHERE item LIKE ?');
$stmt->execute([$test]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['item'];
}

答案 1 :(得分:-1)

在这里,您忘记在预准备语句中绑定参数

以下是示例

$stmt = $pdo->prepare('SELECT * FROM deadfrontier.items WHERE item LIKE "?"');
$stmt->bind_param("s", $test);     // binding the value

$stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['item'];
    }

请尝试这将适用于您的情况