2016-07-01 76 views
1

我已经尝试在100种不同的方式下编写代码,并且无法弄清楚正确的语法。看来不管我怎么写这个,$ loggeduser都不会传递给WHERE用户名。我究竟做错了什么?什么是正确的语法?DBO选择等于和等于

$query = $db->prepare('SELECT * FROM sites WHERE username = ? AND name LIKE ? OR login LIKE ? AND category="te"'); 
$query->bindValue(1, $loggeduser); 
$query->bindValue(2, '%'.$_POST[search].'%'); 
$query->bindValue(3, '%'.$_POST[search].'%'); 
$query->execute();} 
+2

尝试'bindParam',而不是'bindValue' –

+0

返回一个“致命错误:无法按引用传递参数2” – Bruce

+0

的错误意味着第二个参数预计将参考到一个变量.' $ _POST ['搜索']'是一个变量,但你的代码希望PHP解释常量“搜索”。您错过了标识符周围的引号。带有或不带引号的错误存在 –

回答

0

根据this comment

When binding parameters, apparently you can't use a placeholder twice (e.g. "select * from mails where sender=:me or recipient=:me"), you'll have to give them different names otherwise your query will return empty handed (but not fail, unfortunately).

这可能是你的问题,因为你正在试图同一个值绑定到两个独立的占位符。给出如下尝试:

$query = $db->prepare('SELECT * FROM sites WHERE username = :username AND name LIKE :name OR login LIKE :login AND category="te"'); 
$query->bindValue(:username, $loggeduser); 
$query->bindValue(:name, '%'.$_POST['search'].'%'); 
$query->bindValue(:login, '%'.$_POST['search'].'%'); 
$query->execute(); 
+0

其实这个错误是我在理解SQL时失败的。原始代码没有给出错误,因为它运行得非常完美 - 我只是没有期待它给出的结果。请注意,我说好像$ loggeduser变量没有被传递....好像它变成了,该变量正在传递,只是没有在OR之后,我没有意识到我必须写入WHERE .... AND ....或.... AND ...以获得$ loggeduser检查之前和之后OR。 – Bruce

+0

@Bruce我明白了......很高兴你解决了它!这很有道理。 –