1

ここで1つの小さな問題が発生しています。

PHPを介して1つの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構文にエラーがあります。1行目の'-1)VALUES(' N'、' asdfasdf'、'')'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

今、私は考えています、それは次の理由によるものです:

  1. テーブル列に「q3-1」という名前を付けます
  2. または他の問題?

代わりにq3_1に変更しても大丈夫ですか?

4

4 に答える 4

4

フィールド名の前後にバッククォート`を付けると、問題ないはずです。

すなわち:

  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

が原因で、2番目のクエリでエラーが発生しました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 InjectionPDOで使用してみてください

元。)

<?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 に答える