【发布时间】:2011-12-13 18:09:15
【问题描述】:
可能重复:
How do I create a PDO parameterized query with a LIKE statement in PHP?
PHP PDO prepared statement — mysql LIKE query
我正在尝试为我的网站制作搜索引擎,而现在我只是想确保连接一切正常。到目前为止,这是我的代码:
已编辑的代码(仍然无法正常工作,但这是我迄今为止提出的建议):
$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);
$stmt = $db->prepare("SELECT * FROM table_1 WHERE name LIKE ? ORDER BY bid DESC");
$stmt->bindParam(1, "%{$_GET['s']}%", PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll();
我试图查看execute 的不同方法是否会做任何事情,但无论我写上面哪种方式,我都会得到相同的结果,什么都没有。我想要% 通配符,所以它会搜索name 中的任何位置。在那张纸条上,我是否正确使用它?最让我困惑的是,当我在 PHPMyAdmin 中输入完全相同的查询时,查询运行良好,所以我猜测我在某处搞砸了 PDO。
编辑:PHPMyAdmin 查询:
选择 * 从表_1 WHERE name LIKE '%Test%' ORDER BY 出价 DESC 限制 0 , 30
这会返回 1 个结果,正如预期的那样。我的代码和这个查询有什么不同? :/
【问题讨论】:
-
@Matt 关于您的编辑:我编辑的答案应该解释它。
-
@Matt 不,现在您在
?周围添加了引号。别。我刚刚在我的答案中添加了正确的查询以提高清晰度。 -
是的,我意识到我在帖子中有,代码没有;还是不行。
-
请注意,您不应在准备好的语句中引用参数。如果你这样做,它是一个字符串,而不是一个参数(示例代码的注释部分中的
':search'将不起作用,因为它将被解析为一个值为 ":search" 的字符串,而不是一个名为 "搜索”)。此外,仅当示例代码不能正确说明您的问题时才更改它。 “我不知道为什么我的代码不起作用。”不是问题。 “为什么我的代码不起作用?”太模糊而无用。 -
@Matt 这很奇怪,因为这正是文档php.net/manual/en/pdo.prepared-statements.php#example-943中使用的示例