参数化查询PHP / MySQL

时间:2011-10-23 22:24:52

标签: php mysql pdo

  

可能重复:
  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查询:

  

SELECT *   从table_1   名称LIKE'%Test%'   按订单出价DESC   限制0,30

这会返回1个结果,如预期的那样。我的代码和这个查询有什么不同? :/

1 个答案:

答案 0 :(得分:5)

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

$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']