php - MYSql 准备不接受我的请求 : No tables used

标签 php mysql mysqli

我在 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/

相关文章:

javascript - 选中该字段的复选框时设置 Attr Required

mysql - 带复合键数据库表的 w2ui Grid

php - 使用 mysqli 和 php 实例化构造函数类

php - 无需下载,直接将联系人导出到数据库

php - 在 PHP 错误 Apache 给出 500 错误

php - 如何用PHP动态创建文件夹

php - 如果 mysql 中的字段已完成则重定向

MySQL:ORDER BY 空日期 '0000-00-00' 作为最后但其余 ASC

php - 无法将有效变量传递给查询

PHP:动态 URL 问题