PHP REST API开发时Postman报SQL 1064语法错误如何解决
错误原因
该1064 SQL语法错误由SQL语句拼接时的低级失误导致:
你在模型层构造INSERT查询时,表名变量$this->table和后续的SET关键字之间缺少空格分隔,最终拼接出来的SQL语句格式为INSERT INTO 你的表名SET listing_name = :listing_name...,SQL解析器无法识别连在一起的表名SET字符串,直接触发语法报错。
注:MySQL/MariaDB本身是支持INSERT语句用
SET语法赋值的,不用怀疑这个写法的合法性,问题完全出在空格缺失上。
修复步骤
1. 修正SQL拼接代码
找到Listing.php中构造$query的部分,在SET关键字前添加一个空格即可:
// 修改前 $query = 'INSERT INTO ' . $this->table . 'SET listing_name = :listing_name, // 其余字段省略 // 修改后 $query = 'INSERT INTO ' . $this->table . ' SET listing_name = :listing_name, address = :address, postal_code = :postal_code, google_id = :google_id, website = :website, tag_array = :tag_array, area_array = :area_array';
修改后重新请求接口即可正常执行插入操作。
2. 可选优化项(建议加上避免后续问题)
- 接口层新增JSON解析校验,避免传入非法JSON时出现未定义属性报错:
$data = json_decode(file_get_contents("php://input")); if (json_last_error() !== JSON_ERROR_NONE) { echo json_encode(array('message' => '请求参数格式错误')); exit; } - 数据库初始化时配置PDO错误模式为异常模式,方便后续调试:
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
内容的提问来源于stack exchange,提问作者ThelmaIJ
相关产品推荐
相关产品推荐

