【发布时间】: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);