You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 16:15:01