MYSql准备不接受我的请求:没有使用表格

时间:2018-01-28 05:50:11

标签: php mysql mysqli

我在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请求,它完美地运行但是由于某种原因,这个请求没有。

我做错了什么?

1 个答案:

答案 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());
}