【问题标题】:Parameterized Queries PHP/MySQL [duplicate]参数化查询 PHP/MySQL [重复]
【发布时间】: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中使用的示例

标签: php mysql pdo


【解决方案1】:

我不太明白你的问题是什么,但我猜你不知道如何添加%?如果是这样,试试这个:

$stmt = $db->prepare("SELECT * FROM table_1 WHERE name LIKE ? ORDER BY bid DESC");
$stmt->bindValue(1, "%{$_GET['s']}%", PDO::PARAM_STR);
$stmnt->execute();
// fetch and win! :-)

一点解释: PDO 将适当地引用和转义参数?。这意味着,如果您绑定hello,PDO 将用'hello' 替换?(注意引号)。因此,为了将 % 包含在引号中,您必须将它们添加到绑定的内容中,在本例中为 $_GET['s']

【讨论】:

  • 原来它正在工作;我的显示表中变量的区分大小写是它不起作用的原因,而不是查询连接......
猜你喜欢
  • 2015-09-15
  • 2021-09-29
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多