0

次のエラーが発生しました。何時間もかけて確認しましたが、理由がわかりません。

エラー:SQL構文にエラーがあります。1行目の'primary='doej2'、secondary = '1' WHERE id = '2''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

これが私のコードです:

<?php
if (isset($_POST[Edit])){

$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];

$query = mysql_query("UPDATE eventcal SET primary='$primary', secondary='$secondary' WHERE id='$id'");

if (!$query) {
  $_SESSION['alert'] = 'ERROR: ' . mysql_error();
}

}?>

そして、これがeventcalテーブルのテーブル構造です。

 CREATE TABLE `eventcal` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `region` tinyint(3) unsigned NOT NULL,
 `primary` varchar(25) NOT NULL,
 `secondary` tinyint(1) NOT NULL,
 `eventDate` date NOT NULL,
 PRIMARY KEY  (`id`),
 KEY `primary_2` (`primary`),
 KEY `secondary` (`secondary`),
 CONSTRAINT `eventcal_ibfk_1` FOREIGN KEY (`primary`) REFERENCES `users` (`username`) ON UPDATE CASCADE
 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

誰かが私が欠けているものを見ることができますか?ありがとう!

4

3 に答える 3

6

「primary」はMySQLで予約語です。あなたはそれを適切に使用するためにそれの周りにチェックマークを付けることができます(そして他のフィールド:

$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'");
于 2009-07-14T23:23:48.513 に答える
1

「primary」はMySQLの予約語です。ドキュメントから:

予約語は、セクション8.2「<ahref = "http://dev.mysql.com/doc/refman/5.0/en/identifiers.html" rel = "nofollow noreferrer"」で説明されているように引用すると、識別子として許可されます。 >スキーマオブジェクト名」。

于 2009-07-14T23:26:53.033 に答える
1

構文エラーよりも悪いのは、SQLインジェクションの穴です。

これを変える:

ここに画像の説明を入力してくださいコーディングホラー

$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];

このコードに

$id = mysql_real_escape_string($_POST['id']);
$primary = mysql_real_escape_string($_POST['primary']);
$secondary = mysql_real_escape_string($_POST['secondary']);
于 2011-05-28T21:02:18.870 に答える