Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备语句中mysqli select语句中的LIKE/OR运算符出现问题_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 准备语句中mysqli select语句中的LIKE/OR运算符出现问题

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

我正在创建一个简单的mysqli准备语句,它根据搜索从数据库中选择记录。我想使用提交的相同搜索词搜索数据库表中的两个不同列,以查找标题或内容详细信息中的任何匹配项。我在Lynda.com上通过David Powers视频了解了使用面向对象PHP访问数据库的过程,并根据自己的需要修改了该教程。我的大部分工作正常,但是当我在sql语句中添加第二个变量时,我遇到了一个问题。问题是它没有返回任何行。这是我的密码:

$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遗漏了一个参数。看起来就是这样。我本来就在那里,但后来不断地移除东西,重新安排,看我是否能找到错误,然后一定是忘了替换它,没有捕捉到它。有时只需要一双眼睛。谢谢