Php 准备语句中mysqli select语句中的LIKE/OR运算符出现问题
我正在创建一个简单的mysqli准备语句,它根据搜索从数据库中选择记录。我想使用提交的相同搜索词搜索数据库表中的两个不同列,以查找标题或内容详细信息中的任何匹配项。我在Lynda.com上通过David Powers视频了解了使用面向对象PHP访问数据库的过程,并根据自己的需要修改了该教程。我的大部分工作正常,但是当我在sql语句中添加第二个变量时,我遇到了一个问题。问题是它没有返回任何行。这是我的密码:Php 准备语句中mysqli select语句中的LIKE/OR运算符出现问题,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我正在创建一个简单的mysqli准备语句,它根据搜索从数据库中选择记录。我想使用提交的相同搜索词搜索数据库表中的两个不同列,以查找标题或内容详细信息中的任何匹配项。我在Lynda.com上通过David Powers视频了解了使用面向对象PHP访问数据库的过程,并根据自己的需要修改了该教程。我的大部分工作正常,但是当我在sql语句中添加第二个变量时,我遇到了一个问题。问题是它没有返回任何行。这是我的密码: $sql = "SELECT id, heading, details, layout F
$sql = "SELECT id, heading, details, layout FROM content WHERE ( details LIKE ? OR heading LIKE ? )";
$stmt = $db->stmt_init();
if (!$stmt->prepare($sql)) {
$error = $stmt->error;
} else {
$stmt->bind_param('s', $var1, $var2);
$var1 = '%' . $_GET['searchterm'] . '%';
$var2 = '%' . $_GET['searchterm'] . '%';
如果我删除SQL中第一个占位符之后的部分,并从$stmt->bind_param('s',$var1,$var2)中删除“$var2”;然后查询工作正常。例如,以下内容返回正确的结果:
$sql = "SELECT id, heading, details, layout FROM content WHERE details LIKE ?";
$stmt = $db->stmt_init();
if (!$stmt->prepare($sql)) {
$error = $stmt->error;
} else {
$stmt->bind_param('s', $var1);
$var1 = '%' . $_GET['searchterm'] . '%';
一旦我添加了第二个变量,就不会返回任何结果。我还尝试了以下操作,但也返回了0个结果:
$stmt->bind_param('s', $var1, $var1);
$var1 = '%' . $_GET['searchterm'] . '%';
我是一个全新的准备发言,所以任何建议或指导将不胜感激。谢谢。虽然我不太熟悉参数绑定,但您不应该为每个参数指定一个类型吗
$stmt->bind_param('ss', $var1, $var2);
$stmt->bind_参数('s',$var1,$var2)代码>应该是$stmt->bind_参数('ss',$var1,$var2)
您遗漏了一个s
/参数。实际上,OP遗漏了一个参数。看起来就是这样。我本来就在那里,但后来不断地移除东西,重新安排,看我是否能找到错误,然后一定是忘了替换它,没有捕捉到它。有时只需要一双眼睛。谢谢