如何在mysqli准备好的语句中使用SQL LIKE子句[重复]
Posted
技术标签:
【中文标题】如何在mysqli准备好的语句中使用SQL LIKE子句[重复]【英文标题】:How to use SQL LIKE clause with mysqli prepared statements [duplicate] 【发布时间】: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);
【参考方案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 问题似乎是另一个问题,请参阅聊天以上是关于如何在mysqli准备好的语句中使用SQL LIKE子句[重复]的主要内容,如果未能解决你的问题,请参考以下文章