【问题标题】:Issue with LIKE/OR operator in mysqli select statement in a prepared statementmysqli select 语句中的 LIKE/OR 运算符在准备好的语句中出现问题
【发布时间】:2014-11-14 04:29:19
【问题描述】:

我正在创建一个简单的 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('s', $var1, $var2); 应该是 $stmt->bind_param('ss', $var1, $var2); 你错过了一个 s/argument。

标签: php mysqli prepared-statement


【解决方案1】:

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

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

【讨论】:

  • 确实,OP 缺少参数。
  • 看起来就是这样。我原来有那个,但后来一直在删除东西并重新安排,看看我是否能找到错误,然后一定是忘记更换它并且没有抓住它。有时只需要多一双眼睛。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 2017-03-04
  • 2012-12-01
相关资源
最近更新 更多