2013-03-25 51 views
1

当我添加WHERE语句时,我的select语句不起作用。PHP PDO SELECT涉及VARCHAR的SQL在涉及WHERE语句时不起作用

下面的代码返回的东西:

$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)); 

我不知道为什么。你可能会认为这是因为没有声明对象,其“言”元素等于$的话,但...我可以运行这个循环与第一码:

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) 

那么这是怎么回事?我不知道为什么这不起作用。请让我知道我是否做了一件非常愚蠢的事情。

+0

那是什么?(:(字))?你在哪里得到它?为什么你不使用正确的语法? – 2013-03-25 03:10:20

+0

为什么不直接把变量放在你的sql查询中?这很难吗? – 2013-03-25 03:21:25

+0

感谢您的帮助! – george 2013-03-25 03:25:09

回答

0

按PDO运作的,你可能不需要你额外PARAMS撇号。 PDO将根据变量的类型自动工作。所以这将工作正常。

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

谢谢,不知道我是怎么错过的...... – george 2013-03-25 16:57:32

+0

Atleast给出了投票的理由,所以人们可以理解他提出的错误。 ;) – 2013-03-25 19:17:13

-1

你可以试试下面这个:

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

它不会给你的结果,如果你使用()单引号内。

感谢