【发布时间】:2012-10-17 00:10:27
【问题描述】:
嗯,我已经在这个问题上待了几个小时,我这辈子都搞不清楚哪里出了问题。代码如下:
$str = "%" . $_POST['str'] . "%";
$offset = (int) $_POST['offset'];
try {
$stmt = $dbh->prepare("SELECT * FROM Spells WHERE :col LIKE :str ORDER BY :sort LIMIT 10 OFFSET :offset");
$stmt->bindParam(":col",$_POST['col']);
$stmt->bindParam(":str",$str);
$stmt->bindParam(":offset",$offset, PDO::PARAM_INT);
$stmt->bindParam(":sort",$_POST['sort']);
$stmt->execute();
}
catch (PDOException $e) {
echo "MySQL error: " . $e->getMessage() . "<br/>";
die();
}
与数据库的连接工作正常,没有发生错误。如果我在搜索字段中输入%(在查询中将输出为%%%),结果将按预期返回。
我在 phpMyAdmin 中尝试过相同的查询,它工作正常。我一直在从已弃用的 mysql_* 函数中更新此脚本,该函数之前运行良好。
先前已弃用的查询示例:
$sql = "SELECT * FROM Spells WHERE " . $col . " LIKE '%" . $str . "%' ORDER BY " . $sort . " LIMIT 10 OFFSET " . $offset;
正如我可能已经说过的,我也一直在这个网站上搜索,试图找到解决方案;没有任何效果,甚至 MySQL 的 CONCAT('%',:str,'%') 也没有。
我正在测试的服务器正在运行 php 版本 5.3.17。
如果我没有说清楚,我的问题是我在这里做错了什么?对于那些想知道的人(我以为我放了这个,但显然我没有放),没有错误消息。
【问题讨论】:
-
您的问题是什么?您收到错误消息了吗?
-
如果你没有收到错误消息,我假设它没有抛出任何错误,所以它实际上是在进行查询,作为回报,它不会返回/输出任何内容。你试过
:str的bindParam()方法的第三个参数PDO::PARAM_STR了吗? -
@inhan 我确实有,没有变化。
-
See this 调试/查看您的查询。
-
我建议尽可能简化这一点,以确保它确实是破坏的 LIKE(删除所有其他参数)。