【发布时间】:2020-09-13 20:10:53
【问题描述】:
我查看了其他问题、PHP 和 PDO 文档以及许多其他示例,但我觉得卡住了,可能是因为我刚刚开始使用 PHP 和 MySQL。
我正在尝试首先检查是否存在带有 SELECT 语句的行,然后检查是否存在行 DELETE 它。
但是,查询没有通过,我在 Ubuntu 18 上使用 MySQL 8,并且查询只能在 WHERE 子句之后使用单引号:
SELECT bookname FROM libri WHERE bookname LIKE "test.pdf";
DELETE FROM libri WHERE bookname LIKE "test.pdf";
但是似乎我无法用准备好的语句重现它:
$sql = "SELECT bookname FROM libri WHERE bookname LIKE :deleteTerm;";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':deleteTerm', $deleteKey);
$stmt->execute();
我将$deleteKey 设置为$deleteKey = $_POST['delete']; 并尝试将单引号附加为$stmt->bindValue(':deleteTerm', "'".$deleteKey."'"); 它不起作用。
还尝试将引号直接设置为变量名:$deleteKey = "'".$_POST['delete']."'"; 并使用上面准备好的语句,但仍然无法正常工作。
是我遗漏了什么,还是有什么问题?也许我必须使用另一个查询?
【问题讨论】:
-
准备好的语句不需要引号,它将变量的洞内容作为字符串,这就是sql注入不起作用的原因
-
您好 nbk,感谢您的评论和确认,在再次查看代码后,我实际上可以使用
$deleteKey = $_POST['delete'];
标签: php mysql pdo prepared-statement