参数化查询PHP/MySQL

Mat*_*att 1 php mysql pdo

可能重复:
如何在PHP中使用LIKE语句创建PDO参数化查询?
PHP PDO编写语句 - mysql LIKE查询

我正在尝试为我的网站制作一个搜索引擎,而现在我只是想确保连接完全正常.这是我到目前为止的代码:

编辑代码(仍然不起作用,但到目前为止我在这里的建议):

$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();
Run Code Online (Sandbox Code Playgroud)

我试着看看不同的方法是否execute可以做任何事情,但无论上面哪种方式我写它,我都得到相同的结果,没有.我想%在那里使用通配符,所以它会在任何地方进行搜索name.在那个笔记上,我正确使用它吗?大多数混淆我的事情是,当我在完全相同的查询到的phpMyAdmin输入,查询经过精细跑,所以我的猜测是,我在什么地方搞砸了的PDO.


编辑:PHPMyAdmin查询:

SELECT*FROM table_1 WHERE name LIKE'%Test%'ORDER BY bid DESC LIMIT 0,30

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

mid*_*dus 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! :-)
Run Code Online (Sandbox Code Playgroud)

一点解释: PDO将引用并?适当地转义参数.这意味着,如果您具有约束力hello,PDO将替换?'hello'(注意引号).因此,为了%使引号内部,您必须将它们添加到绑定的内容中,在这种情况下$_GET['s'].