3

我有两个 mysql 插入语句。在插入语句中指定的所有字段都可以正常工作并将记录插入到 testTable。(即使 http_referer 为空,插入语句也将记录插入到引用字段为空的表中)

指定所有字段的第一个插入语句:

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

问题在于第二个插入语句没有向 testTable 插入任何记录!你们能告诉我为什么我的第二个插入语句没有向 testTable 插入任何记录吗?

第二个插入语句:

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_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。

于 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

您必须使用第二个查询指定字段。如果您不打算按列的顺序插入每一列,那么您必须指定列名。

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 回答
0

在第一个查询中不会出现错误,因为您正在指定所有列和字段。如果任何字段是自动增量或默认为 null,您应该提及所有列名以及插入查询中的值,接受自动增量字段的 null

这是演示

  1. 所有字段值

    insert into testtable values (1,"127.1.1.0",curdate(),"test 1","default");
    
  2. 无默认值

    insert into testtable (id,ip,date,title) values (1,"127.1.1.0",curdate(),"test 1");
    
  3. 没有自动增量字段

    insert into testtable (ip,date,title) values ("127.1.1.0",curdate(),"test 1");
    
于 2013-02-08T20:20:47.550 回答