0

このクエリがあります

 mysql_query("INSERT into reviews VALUES(0,$pid,$id,'new')") or die(mysql_error()); 

エラーが出るようです

「SQL 構文にエラーがあります。1 行目の ''new')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください」

完全に問題ないように見えますが、データベースのテーブル構造は次のとおりです。

 `id` int(11) NOT NULL AUTO_INCREMENT,
  `proposalid` int(11) NOT NULL,
  `reviewerid` int(11) NOT NULL,
  `status` enum('approved','declined','noresponse','new') NOT NULL DEFAULT 'new',
  PRIMARY KEY (`id`);

何も問題はないように見えますが、なぜエラーが発生するのでしょうか?

4

3 に答える 3

0

ENUM のデフォルト値はstatus「new」に設定されているため、次のような INSERT を試すことができますか。

mysql_query("INSERT into reviews (`proposalid`, `reviewrid`) VALUES($pid, $id);") or die(mysql_error());

たぶん、この後、エラーはもっと話になるでしょう。

于 2013-05-22T03:11:53.067 に答える
0

DEFAULT0 の代わりに自動インクリメントを使用するか、列を明示的に宣言しようとしましたINSERT into reviews (proposalid, reviewerid, status) VALUES($pid, $id, 'new')か?

于 2013-05-22T03:09:01.677 に答える
0

の値により$id、誤った引用符がエラーをスローする原因となっている可能性があります。

例えば、

$pid = "6";
$id = "5'";

原因:

INSERT into reviews VALUES(0,6,5','new')

INSERTステートメントを作成するときは、列リストも使用する必要があります。newは列のデフォルトであるため、完全statusに除外できます (自動インクリメントの主キーも除外できます)。

INSERT into reviews (proposalid, reviewerid) VALUES($id, $pid)

$idとがユーザー入力の場合、$pid準備済みステートメントを使用する必要があります。また、使用している API ( mysql_) は非推奨です。PDOormysqli_は置換であり、どちらも準備済みステートメントが入力をサニタイズできるようにします。

于 2013-05-22T03:11:01.520 に答える