3

2つのmysql挿入ステートメントがあります。insertステートメントで指定されたすべてのフィールドを持つものは正常に機能し、testTableにレコードを挿入します(http_refererが空の場合でも、insertステートメントはリファラーフィールドが空のテーブルにレコードを挿入します)

すべてのフィールドが指定された最初のInsertステートメント:

mysql_query("INSERT INTO testTable VALUES('$ID','".$_SERVER['REMOTE_ADDR']."',NOW(),'Page1','".$_SERVER['HTTP_REFERER']."')");

問題は、testTableにレコードを挿入しない2番目の挿入ステートメントにあります。2番目の挿入ステートメントがtestTableにレコードを挿入しない理由を教えてください。

2番目の挿入ステートメント:

mysql_query("INSERT INTO testTable VALUES('$ID','".$_SERVER['REMOTE_ADDR']."',NOW(),'Page1')");

テーブルの作成:

CREATE TABLE IF NOT EXISTS `testTable` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(32) DEFAULT NULL,
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `Title` varchar(32) NOT NULL,
  `Ref` varchar(250) NULL default '',
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1784 ;
4

5 に答える 5

5

はい、列リストを使用します。

$sql = "INSERT INTO table (`ip`, `date`, `Title`) VALUES ('".$_SERVER['REMOTE_ADDR']."', NOW(), 'Page 1')";

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、公式に非推奨になっています。赤いボックスがか?代わりにプリペアドステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事はどちらを決定するのに役立ちます。

于 2013-02-08T19:49:22.300 に答える
4

挿入ステートメントで挿入する列を指定することを選択できます。

$sql = "INSERT INTO testTable(ID, ip, date, Title)
VALUES('$ID','".$_SERVER['REMOTE_ADDR']."',NOW(),'Page1')";

mysqlさらに、関数は現在非推奨であるため、使用しないでください。MySQLi、またはPDO

于 2013-02-08T19:51:35.393 に答える
2

2 番目のクエリでフィールドを指定する必要があります。すべての列を列の順序で挿入しない場合は、列名を指定する必要があります。

INSERT INTO table (column1, column2, columns3) VALUES ('$value1', '$value2', '$value3');
于 2013-02-08T19:50:13.763 に答える
0

列リストまたはSET構文を使用できます

列リスト:

INSERT INTO table (column1, column2) VALUES ('$value1', '$value2');

設定構文:

INSERT INTO table SET column1 = '$value1', column2 = '$value2';

于 2013-02-08T19:53:19.353 に答える