可能重复:
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个结果,如预期的那样。我的代码和这个查询有什么不同? :/
答案 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']
。