【问题标题】:How to use SQL LIKE clause with mysqli prepared statements [duplicate]如何在mysqli准备好的语句中使用SQL LIKE子句[重复]
【发布时间】:2019-08-25 18:08:08
【问题描述】:

我正在尝试将 SQL LIKE 子句与 mysqli 准备好的语句一起使用。

我已经尝试过其他示例,例如 $sysName = "{$_POST['ss']}%";$sysName = $_POST['ss'] . '%';

if(isset($_POST['ss'])) {
   $sysName = $_POST['ss'] . '%';
      if(strlen($sysName) >0) {
         $qry = mysqli_stmt_prepare($link, "SELECT * FROM tblSchools WHERE systemName LIKE ?");
         mysqli_stmt_bind_param($qry,'s',$sysName);
         mysqli_stmt_execute($qry);
         $result = mysqli_stmt_get_result($qry);
      }
}

如果 $_POST['ss'] 填充了单词 sys,并且在 tblSchools 中存在一个名为“system”的 systemName,则结果集应包含与“system”行相关的行信息。不管我放什么,尽管结果总是返回空值。我与数据库的连接成功。我已经成功地使用 mysqli_query 和直接字符串进行了测试,但是当我切换到 LIKE 子句上的准备好的语句时,它不起作用。几乎一整天以来,我一直在努力解决这个问题。

编辑:响应第一个答案 还是不行

    $stmt = mysqli_stmt_init($link);
    $sysName = "sys%";
    if(strlen($sysName) >0) {
        if(!mysqli_stmt_prepare($stmt, "SELECT * FROM tblSchools WHERE systemName LIKE ?")) {
            echo "1";
            exit;
        } else {
            if(mysqli_stmt_bind_param($stmt,'s',$sysName)) echo "2";
            if(mysqli_stmt_execute($stmt)) echo "3";
            $result = mysqli_stmt_fetch($stmt);
            $row = mysqli_fetch_array($result);
            var_dump($row);
            echo "Hey";
        }
    }

打印 2 和 3 而不是 1

【问题讨论】:

  • 当你说结果总是返回null,你的意思是$result是null吗?
  • $result 为 NULL,当我使用 mysqli_stmt_num_rows($qry) 或 mysqli_num_rows($result) 时都返回空白
  • 如果语句是 UPDATE、DELETE 或 INSERT,则可以使用 mysqli_stmt_affected_rows() 函数确定受影响行的总数。同样,如果查询产生结果集,则使用 mysqli_stmt_fetch() 函数。见:php.net/manual/en/mysqli-stmt.execute.php
  • @AndreaManzi 我以前使用过 mysqli_stmt_get_result 并且可以正常工作。我只是尝试插入建议的mysqli_stmt_fetch,结果是一样的。
  • 什么是 $qry? $result = mysqli_stmt_fetch($qry);

标签: php sql mysqli


【解决方案1】:

试试这个:

$link = \mysqli_connect("127.0.0.1", "user", "password", "dbname");

if (!$link) {
    $error = \mysqli_connect_error();
    $errno = \mysqli_connect_errno();
    print "$errno: $error\n";
    exit();
}

$query = "SELECT * FROM tblSchools WHERE systemName LIKE ?";

$stmt = \mysqli_stmt_init($link);
if (!\mysqli_stmt_prepare($stmt, $query)) {
    print "Failed to prepare statement\n";
    exit;
} else {
    $sysName = 'sys%';
    \mysqli_stmt_bind_param($stmt, "s", $sysName);

    \mysqli_stmt_execute($stmt);
    $result = \mysqli_stmt_get_result($stmt);
    $row = mysqli_fetch_array($result);
    var_dump($row);
}

对我有用

【讨论】:

  • 还是不行。请参阅原始问题中的编辑以获取响应中的代码块
  • 它与op有何不同?
  • @YourCommonSense 问题似乎是另一个问题,请参阅聊天
猜你喜欢
  • 2010-10-20
  • 2011-04-23
  • 2012-03-26
  • 1970-01-01
相关资源
最近更新 更多