首页 > 解决方案 > 在准备好的 SQL LIKE - PHP 中使用通配符 - 或者我的结果是否损坏?

问题描述

警告 -

  1. google了很多次
  2. 在堆栈溢出中查看了几个答案(我知道可能看起来不够努力)
  3. 在 w3schools 中查看过准备好的陈述
  4. 已经查看了几个关于 PHP 中准备好的语句的在线教程
  5. 曾与熟悉 SQL 但对调试 PHP 不太了解的本地开发人员合作
  6. 曾与具有一定 SQL 知识的本地软件工程师合作进行调试,但无济于事

所以这里 - 我有一个简单的表单提交来搜索数据库中的列 - 使用 LIKE 和通配符。我已经检查了 PHP 中的 SQL(预先使用准备好的语句)和 MySQL 本身,并且代码是正确的 - SELECT * FROM database.table WHERE Col LIKE '%$variable%' <-- 有效。

我现在正在使用经过充分准备的语句以在现实世界中使用(我已经 5 年没有编写 PHP 代码了,所以这是一个学习曲线)。

我所有准备好的语句都可以工作,SELECT、INSERT 等,除了这个搜索......

$searchParam = mysqli_real_escape_string($conn, htmlspecialchars($_POST['Search'])); 
$searchStmt = $conn->prepare("SELECT ID, Title FROM insertdatabasenamehere.insertTableNameHere WHERE Title LIKE ?");
$searchItem = '%'.$searchParam.'%';
$searchStmt->bind_param("s", $searchItem);
$searchStmt->execute();
$searchQueryResult = $searchStmt->get_result();

希望到目前为止一切顺利,除非有任何琐碎的 OMG,您为什么要这样做……这应该基于以前准备好的 SQL 语句。然后它变得很奇怪。

if ($searchStmt->num_rows > 0) {
    //some html here
    while($row = $searchQueryResult->fetch_assoc()) { 
        // loop through the result set echoing out $title and $ID
    }
} else {
    echo "No result found";
}

每次 - 没有找到结果所以它不会在 LIKE 或任何东西上出错,只是没有匹配,并且数据库中肯定有匹配的项目。

我哪里出错了??

谢谢你!

标签: phpmysqlsqlprepared-statement

解决方案


推荐阅读