我在 php 中使用 MySQLi 来防止 SQL 注入(inject)到我的表中。
我有以下 SQL 命令,如果输入到 phpMyAdmin 中,该命令可以完美运行。
INSERT INTO UsageData (MyID) SELECT * FROM (SELECT 'USER') AS tmp WHERE NOT EXISTS ( SELECT MyID FROM UsageData WHERE MyID = 'USER') LIMIT 1
本质上,它的目的是插入一个 MyID 为“USER”的新行(如果这样的行尚不存在)。
我尝试像这样使用 php 来做到这一点
$query1 = "INSERT INTO UsageData (MyID) SELECT * FROM (SELECT ?) AS tmp WHERE NOT EXISTS ( SELECT MyID FROM UsageData WHERE MyID = ? ) LIMIT 1";
if ($statement1 = $database->prepare($query1)) {
$statement1->bind_param("ss", $inID, $inID);
$statement1->execute();
$statement1->close();
} else {
echo "Incorrect SQL 1\n";
echo "Query: ".$query1."\n";
echo $database->error."\n";
}
然而,这总是会导致回显“错误的 SQL”。提到的错误是“未使用表”。
我在 PHP 中紧随其后发送了一个 SQL 请求,该请求完美运行,但由于某种原因,此请求无法正常运行。
我做错了什么?
最佳答案
好吧,我假设您已经通过执行诸如 $database = new pdo(...);
之类的操作来正确设置数据库处理程序。 >
我对将赋值语句放入 as if 条件中时会发生什么有点模糊。我建议您在 if-else
block 之前进行赋值,然后测试看看 if ($statement1 === false)
(测试等价性,而不仅仅是相等性) 出现错误。否则,您可以将 $database->prepare(...)
包含在 try-catch
block 中,因为如果出现如下错误,它会发出 PDOException:
try {
$statement1 = $database->prepare($query1);
} catch (PDOException $e) {
die("PDO Exception: " . $e->getCode() . ": " . $e->getMessage());
}
关于php - MYSql 准备不接受我的请求 : No tables used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48483585/