1

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

我正在通过 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 行的 '-1) VALUES ('N', 'asdfasdf', '' )' 附近使用正确的语法

现在,我在想,是不是因为:

  1. 我将表格列命名为“q3-1”
  2. 或任何其他问题?

如果我改为 q3_1 可以吗?

4

4 回答 4

4

如果你在字段名周围加上反引号`,应该没问题

IE:

  INSERT INTO table (`q1`,`q2`,`q3-1`) ...
于 2012-08-07T12:27:24.967 回答
4

使用反引号。查看PDO

INSERT INTO table (q1,q2,`q3-1`) 
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
于 2012-08-07T12:27:35.213 回答
1

您的第二个查询有错误,因为q3-1. 它应该在引号中:

INSERT INTO table (q1,q2,`q3-1`) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...)
于 2012-08-07T12:26:59.223 回答
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();

?>
于 2012-08-07T12:49:55.100 回答