我在php中使用MySQLi来防止使用我的表进行SQL注入。
如果输入phpMyAdmin,我有以下SQL命令可以正常工作。
INSERT INTO UsageData (MyID) SELECT * FROM (SELECT 'USER') AS tmp WHERE NOT EXISTS ( SELECT MyID FROM UsageData WHERE MyID = 'USER') LIMIT 1
基本上,如果此行尚不存在,则打算将MyID作为“USER”插入新行。
我试过像这样用
这样做$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请求,它完美地运行但是由于某种原因,这个请求没有。
我做错了什么?
答案 0 :(得分:0)
好的,我将假设您已经完成了通过执行$database = new pdo(...);
当你将赋值语句放在if条件中时会发生什么,这有点模糊。我建议你在if-else
块之前完成赋值,然后测试以查看错误的if ($statement1 === false)
(测试等价,而不仅仅是相等)。否则,如果出现错误,您可以将$database->prepare(...)
括在try-catch
块中,因为它会发出PDOException:
try {
$statement1 = $database->prepare($query1);
} catch (PDOException $e) {
die("PDO Exception: " . $e->getCode() . ": " . $e->getMessage());
}