php - 连接失败: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) ""
解决方案
$stmt = $conn -> prepare("SELECT phone, salesRepEmployeeNumber, creditLimit FROM customers WHERE customerNumber = ?");
$stmt->execute(array($custom_n));
您的代码看起来不错,所以我假设您的字符串逃脱了查询。下次尝试使用准备好的语句。
推荐阅读
- snakemake - 是否可以有可选的空 Snakemake 通配符?
- html - 制作 React\Http\Message\Response (ReactPHP) 时如何包含 HTML 标签
- ruby-on-rails - IOError:运行 [gem install bundler] 时 HTTP 会话尚未启动
- wireshark - SIM EF文件修改
- r - 安装具有特定版本和测试的 R 包
- plotly - Plotly 烛台自定义颜色
- google-chrome - 刷新时 PWA ERR_FAILED
- python - PyCharm Docker 集成 - 尝试在 Linux Docker 上从 Windows PyCharm 运行时出现“没有这样的文件或目录”错误
- d3.js - 具有预先计算频率的 D3 直方图
- simulation - 我要减少多少实际模型才能模拟?