2012-08-07 40 views
1

我遇到了一個小問題就在這裏:命名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']."'...) 

出現以下錯誤:

現在

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1) VALUES ('N', 'asdfasdf', '')' at line 1

,我在想,是不是因爲:

  1. 我將表列命名爲'q3-1'
  2. 或其他任何問題?

如果我將其更改爲q3_1,它會好嗎?

+2

開關連字符用底線。另外,請記住MySQL有一個保留字列表,所以最好將列名和表名包裝在tick中,如下所示:'''column_name \'' – DavidS 2012-08-07 12:28:28

+0

q3-1看起來像是一個sql操作。最好使用q3_1或其他命名約定。 – Jim 2012-08-07 12:29:19

+0

專欄通常很難拼寫;;) – 2012-08-21 19:29:03

回答

1

由於q3-1,您在第二個查詢中出錯。它應該是在引號:

INSERT INTO table (q1,q2,`q3-1`) VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 
+1

閱讀這個問題有時候是件好事:'現在,我在想,是因爲:我把表顏色命名爲'q3-1' – zessx 2012-08-07 12:28:15

4

如果你把反引號`周圍的字段名,應該OK

即:

INSERT INTO table (`q1`,`q2`,`q3-1`) ... 
4

使用反引號。看看PDO

INSERT INTO table (q1,q2,`q3-1`) 
VALUES ('".$_POST['Q1']."', '".$_POST['Q2']."'...) 
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(); 

?>