命名MySQL表列

时间:2012-08-07 12:25:32

标签: php mysql

我在这里遇到一个小问题:

我正在通过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','')'

现在,我在想,是因为:

  1. 我将表格列命名为“q3-1”
  2. 或任何其他问题?
  3. 如果我将其更改为q3_1,那会没关系吗?

4 个答案:

答案 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();

?>