首页 > 解决方案 > 如何将 SQL LIKE 子句与 mysqli 准备好的语句一起使用

问题描述

我正在尝试使用带有 mysqli 准备语句的 SQL LIKE 子句。

我已经尝试过其他示例,例如 $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' 行相关的行信息。不管我放什么,尽管结果总是返回 null。我与数据库的连接成功。我已经成功地使用 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

标签: phpsqlmysqli

解决方案


Try this:

$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);
}

it works for me


推荐阅读