当涉及WHERE语句时,涉及VARCHAR的PHP PDO SELECT SQL不起作用

时间:2013-03-25 03:08:42

标签: php sql pdo

添加WHERE语句时,我的select语句不起作用。

以下代码返回一些内容:

$sql = "SELECT * FROM statement";
$stmt = $dbconn->prepare($sql);
$stmt->execute(array(':words'=>$words));

但这不是:

$sql = "SELECT * FROM statement WHERE words='(:words)'";
$stmt = $dbconn->prepare($sql);
$stmt->execute(array(':words'=>$words));

我不确定为什么。您可能认为这是因为没有语句对象,其“words”元素等于$ words,但有...我可以使用第一个代码运行此循环:

foreach ($stmt as $s)
{
    var_dump($words, $s['words'], ($words==$s['words']));
    echo "<br>";
}

这是我的输出:

string(4) "test" string(5) "test1" bool(false) 
string(4) "test" string(5) "test2" bool(false) 
string(4) "test" string(4) "test" bool(true) 

那是什么交易?我不知道为什么这不起作用。如果我做的事非常愚蠢,请告诉我。

2 个答案:

答案 0 :(得分:0)

根据PDO的工作原理,你的params可能不需要额外的撇号。 PDO会根据变量的类型自动运行。所以这样可以正常工作。

$sql = "SELECT * FROM statement WHERE words=:words";
$stmt = $dbconn->prepare($sql);
$stmt->execute(array(':words'=>$words));

答案 1 :(得分:-1)

您可以尝试以下方法:

$sql = "SELECT * FROM statement WHERE words in (':words')"; $statement->execute(array(':words' => $words));

如果您在单引号内使用(),则不会给您结果。

由于