Php DBO选择其中的equals和like

Php DBO选择其中的equals和like,php,mysql,dbo,Php,Mysql,Dbo,我试过用100种不同的方法编写下面的代码,但无法找到正确的语法。似乎无论我如何编写,$loggeduser都不会传递给WHERE用户名。我做错了什么?正确的语法是什么 $query = $db->prepare('SELECT * FROM sites WHERE username = ? AND name LIKE ? OR login LIKE ? AND category="te"'); $query->bindValue(1, $loggeduser); $query->

我试过用100种不同的方法编写下面的代码,但无法找到正确的语法。似乎无论我如何编写,$loggeduser都不会传递给WHERE用户名。我做错了什么?正确的语法是什么

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

当绑定参数时,显然不能两次使用占位符(例如,“select*from mails where sender=:me或receiver=:me”),您必须为它们指定不同的名称,否则您的查询将空手返回(但不幸的是不会失败)

这可能是您的问题,因为您正试图将相同的值绑定到两个单独的占位符。尝试以下方法:

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

当绑定参数时,显然不能两次使用占位符(例如,“select*from mails where sender=:me或receiver=:me”),您必须为它们指定不同的名称,否则您的查询将空手返回(但不幸的是不会失败)

这可能是您的问题,因为您正试图将相同的值绑定到两个单独的占位符。尝试以下方法:

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

请尝试使用
bindParam
而不是返回“致命错误:无法通过引用传递参数2”的
bindValue
。该错误意味着第二个参数应该是对变量的引用。
$\u POST['search']
是一个变量,但您的代码希望PHP解释常量“search”。您缺少标识符周围的引号。无论是否使用引号,都会出现错误。如果我将它们切换为bindValue而不是bindParam,则它们可以工作,但$loggeduser不绑定。我只在$loggeduser上尝试了bindValue和bindParam,但都没有任何效果。我还回显了$\u POST['search'](和$\u POST[search])变量被传递了。我完全目瞪口呆。我试过bindParam(我认为这不应该起作用,因为“%”实际上不是对变量的引用。我尝试过bindValue。我尝试过在第一个绑定上使用bindParam,无论我如何做,第二个和第三个绑定值都可以完美工作,但第一个绑定值不行。我还回显了所有变量以确保返回值。我是t a loss.try
bindParam
而不是返回“致命错误:无法通过引用传递参数2”的
bindValue
。错误意味着第二个参数应该是对变量的引用。
$\u POST['search']
是一个变量,但您的代码希望PHP解释常量“search”。您缺少标识符周围的引号。带引号或不带引号都会出现错误。如果我将它们切换为bindValue而不是bindParam,它们会工作,但$loggeduser不会绑定。我仅在$loggeduser上尝试了bindValue和bindParam,但都没有任何效果。我还回显了$\u POST['search'](和$\u POST[search])变量已传递。我完全目瞪口呆。我已尝试bindParam(我认为这不应该起作用,因为“%”实际上不是对变量的引用。我尝试过bindValue。我尝试过在第一个绑定上使用bindParam,无论我如何做,第二个和第三个绑定值都可以完美工作,但第一个绑定值不行。我还回显了所有变量以确保返回值。我是这不是一个损失。事实上,错误在于我无法理解SQL。我的原始代码没有给出错误,因为它运行得完美无缺-我只是不期望它给出的结果。请注意,我说好像$loggeduser变量没有被传递……事实证明,变量是被传递的,而不是在或者,我没有意识到我必须在…和…或…和…之前和之后写$loggeduser检查。@Bruce我明白了…很高兴你解决了它!这是有道理的。事实上,错误在于我不理解SQL。我的原始代码没有给出错误,因为它运行得完美无缺-我只是不期望它会有结果注意,我说好像$loggeduser变量没有被传递……结果是,变量被传递了,只是没有在OR之后,我没有意识到我必须写在哪里……和……或……和……以在OR前后得到$loggeduser检查。@Bruce我明白了……很高兴你解决了它!这是有意义的。