php - 如何将 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
解决方案
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
推荐阅读
- javascript - 重新渲染组件的问题
- data-structures - 招聘问题 - 方法可视化问题?
- java - SonarLint 抛出 IllegalStateException -> 无法读取本地问题存储索引
- reactjs - 如何在反应中从列表中迭代?
- javascript - npm replace:用 npm 脚本替换多个文件中的文本的问题
- .net - 在 .NET Core 中添加自定义 BasicAuthenticationHandler - 将必要的服务注入处理程序的问题
- spring - 实体数据加载_in Spring Batch Boot
- c++ - 如何在参数化的 googletest 中传递 N 个变量进行测试?
- xaml - Xamarin Forms Right center 复选框
- c - C - 无法在 OSX 的当前目录上创建文件