PDO错误:语法错误或访问冲突:1064你的SQL语法中有错误;?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (354)

我在php脚本中遇到错误:

PHP致命错误:未捕获PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064你的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在/var/www/html/a.php:143的第1行附近使用正确的语法

我如何连接到mysql:

try{
    $pdo = new PDO("mysql:host=localhost;dbname=db_name", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();
}

它打印:“连接成功”。这些是包含PDO查询的第142和143行:

$stmt = $pdo->prepare("SELECT has_paid FROM info WHERE chat_id=".$chat_id);
$stmt->execute();

我该如何解决这个问题?

提问于
用户回答回答于

你没有正确地使用准备好的语句,并且正在打开自己的SQL注入漏洞。

$stmt = $pdo->prepare("SELECT has_paid FROM info WHERE chat_id= :chat_id");
$stmt->bindValue(":chat_id", $chat_id);
$stmt->execute();
用户回答回答于

我怀疑你$chat_id是空的。所以你的SQL查询最终成为:

SELECT has_paid FROM info WHERE chat_id=

你应该检查你设置的代码,$chat_id并在尝试查询之前确保它具有非空值。

顺便说一句,我使用你似乎很奇怪prepare()execute()但你没有使用查询参数。你应该这样编码:

$stmt = $pdo->prepare("SELECT has_paid FROM info WHERE chat_id=?");
$stmt->execute([$chat_id]);

扫码关注云+社区

领取腾讯云代金券