在预准备语句中的mysqli select语句中使用LIKE / OR运算符

时间:2014-09-19 14:27:47

标签: php mysqli prepared-statement

我正在创建一个简单的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中的部分,并删除" $ var2"来自$ stmt-> bind_param(' s',$ var1,$ 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'] . '%';

我对准备好的陈述是全新的,所以任何建议或指导都将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:3)

虽然我对参数绑定不是很熟悉,但是你不应该为每个参数指定一个类型,即

$stmt->bind_param('ss', $var1, $var2);