首页 > 解决方案 > 连接失败:SQLSTATE [42000]:语法错误或访问冲突:1064

问题描述

我已经看到了很多与我类似的问题,但我的不同:我的错误不是由"keyword"在 SQL 中使用 a 引起的!

当我运行我的代码时,如果我取消WHERE子句或使用硬编码值,例如" WHERE customerNumber = 356"它可以正常工作,但如果我尝试使用变量的值$custom_n,则会引发错误。

<?php 
            $custom_n = $_POST["emp"];
            $servername = "localhost";
            $username = "root";
            $password = "";

            try {
                $conn = new PDO("mysql:host=$servername;dbname=classicmodels", $username, $password);
                $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                $stmt = $conn -> prepare("SELECT phone, salesRepEmployeeNumber, creditLimit FROM customers WHERE customerNumber = $custom_n");
                $stmt -> execute();
                $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
                foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
                    echo $v;
                }
            }
            catch(PDOException $e) {
                echo "Connection failed: " . $e->getMessage();
            }

            $conn = null;

        ?>

如果我对 custom_n 和 gettype 进行回显,我会得到:353 字符串,这就是我想要的。

这是完整的错误:

连接失败:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在第 1 行的 '' 附近使用的正确语法

正如 Magnus Eriksson 所建议的,如果我这样做,var_dump($custom_n);我会得到以下输出:string(12) ""

标签: phpmysqlsqlpdo

解决方案


$stmt = $conn -> prepare("SELECT phone, salesRepEmployeeNumber, creditLimit FROM customers WHERE customerNumber = ?");
$stmt->execute(array($custom_n));

您的代码看起来不错,所以我假设您的字符串逃脱了查询。下次尝试使用准备好的语句。


推荐阅读