切换XAMPP后PDO执行INSERT语句报MariaDB 1064 SQL语法错误如何解决
你遇到的1064语法错误核心原因是新旧环境数据库(原虚拟机MySQL/XAMPP MariaDB)的版本差异、默认SQL模式配置不同导致字段名解析异常,按以下步骤排查解决:
- 给INSERT语句中所有字段名加上反引号包裹,避免字段名被识别为SQL保留字,同时移除箭头两侧多余空格避免PHP解析异常,修改后的预处理语句如下:
$titre = $_POST["titre"]; $categorie = $_POST["categorie"]; $portion = $_POST["portion"]; $heure_cuiss = $_POST["heure_cuiss"]; $minute_cuiss = $_POST["minute_cuiss"]; $heure_prepa = $_POST["heure_prepa"]; $minute_prepa = $_POST["minute_prepa"]; $heure_rep = $_POST["heure_rep"]; $minute_rep = $_POST["minute_rep"]; $cuiss = $_POST["cuiss"]; $cost = $_POST["cost"]; $dif = $_POST["dif"]; $histoire = $_POST["histoire"]; $region = $_POST["region"]; $temps = intval($heure_cuiss) + intval($minute_cuiss)/60 + intval($heure_prepa) + intval($minute_prepa)/60 + intval($heure_rep) + intval($minute_rep)/60; // 字段全部加反引号包裹 $query = $bdd->prepare('INSERT INTO recette (`titre`, `categorie`, `portion`, `heure_cuiss`, `minute_cuiss`, `heure_prepa`, `minute_prepa`, `heure_rep`, `minute_rep`, `cuiss`, `cost`, `dif`, `histoire`, `region`, `temps`) VALUES(:titre, :categorie, :portion, :heure_cuiss, :minute_cuiss, :heure_prepa, :minute_prepa, :heure_rep, :minute_rep, :cuiss, :cost, :dif, :histoire, :region, :temps)'); $query->execute(array('titre'=>$titre, 'categorie'=>$categorie, 'portion'=>$portion, 'heure_cuiss'=>$heure_cuiss, 'minute_cuiss'=>$minute_cuiss, 'heure_prepa'=>$heure_prepa, 'minute_prepa'=>$minute_prepa, 'heure_rep'=>$heure_rep, 'minute_rep'=>$minute_rep, 'cuiss'=>$cuiss, 'cost'=>$cost, 'dif'=>$dif, 'histoire'=>$histoire, 'region'=>$region, 'temps'=>intval($temps)));
- 调整数据库连接配置
- 检查
$bdd连接代码中是否指定了正确的数据库名,编码设置为utf8mb4 - 执行插入前先重置SQL模式,避免MariaDB严格模式带来的语法限制:
$bdd->exec("SET sql_mode = ''");
- 验证表结构匹配
登录phpMyAdmin查看recette表的字段列表,确认所有INSERT语句中的字段名拼写、数据类型和表结构完全一致,没有新增必填未传的字段。 - 调试方案
如果修改后仍报错,可以将预编译的SQL字符串单独打印输出,复制到phpMyAdmin的SQL执行窗口直接运行,就能得到更精准的错误提示,快速定位问题点。
内容的提问来源于stack exchange,提问作者damien merles
相关产品推荐
相关产品推荐

