我在这里遇到一个小问题:
我正在通过PHP输入一个MySQL查询。我检查连接工作正常,看起来如下:
INSERT INTO table (q1,q2,q3) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
然后当我将查询更改为以下内容时,出现错误:
INSERT INTO table (q1,q2,q3-1) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
出现以下错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行附近使用正确的语法('N','asdfasdf','')'
现在,我在想,是因为:
如果我将其更改为q3_1,那会没关系吗?
答案 0 :(得分:4)
如果你在字段名称周围添加反引号,那就应该没问题
即:
INSERT INTO table (`q1`,`q2`,`q3-1`) ...
答案 1 :(得分:4)
使用反引号。查看PDO。
INSERT INTO table (q1,q2,`q3-1`)
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
答案 2 :(得分:1)
由于q3-1
,您的第二个查询中有错误。它应该在引号中:
INSERT INTO table (q1,q2,`q3-1`) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
答案 3 :(得分:1)
使用反引号(`)
转义列名INSERT INTO table (`q1`, `q2`, `q3-1`)
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
但SQL Injection
此声明易受攻击。尝试将其与 PDO
例)
<?php
$stmt = $dbh->prepare("INSERT INTO table (`q1`, `q2`, `q3-1`) VALUES (?, ?, ?)");
$stmt->bindParam(1, $_POST['Q1']);
$stmt->bindParam(2, $_POST['Q2']);
$stmt->bindParam(3, $_POST['Q3']);
$stmt->execute();
?>