首页 > 解决方案 > 将带引号的参数传递给准备好的语句 PDO

问题描述

我检查了其他问题、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']."'";并使用上面的准备好的语句,但仍然无法正常工作。

我错过了什么,或者做错了什么?也许我必须使用另一个查询?

标签: phpmysqlpdoprepared-statement

解决方案


您所做的交易的“选择”部分是不必要的。因为你的意思是如果它存在就删除它。您正在尝试在下一部分中将其删除。如果你真的直接运行第二部分,如果它已经存在,它会删除它。我也建议你在爪区尝试这个。

$sql = " DELETE FROM libri WHERE bookname LIKE 'test.pdf'";

推荐阅读