2013-02-08 4 views
0

У меня есть два оператора вставки mysql. Один со всеми полями, указанных в вставном заявлении отлично работает и вставить запись в TESTTABLE (Даже когда HTTP_REFERER пуст Вкладыш заявление вставка записей в таблицу с полем реферер пусто)Предоставляет ли MySQL Insert возможность не указывать все поля?

Первое Вставьте заявление со всеми полями, указанными:.

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

Проблема заключается в том, что вторая инструкция insert не вставляет никакой записи в testTable! Не могли бы вы, ребята, сказать мне, почему мой второй оператор insert не вставляет какую-либо запись в 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 ; 

ответ

3

Вы можете указать, какие столбцы вы хотите вставить в инструкцию insert.

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

Кроме того, пожалуйста, не используйте mysql функции, поскольку они являются устаревшими в настоящее время. Используйте MySQLi или PDO

5

Да, с помощью списка столбцов.

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

Please, don't use mysql_* functions in new code. Они больше не поддерживаются and are officially deprecated. См. red box? Узнайте о prepared statements вместо этого, и используйте PDO или MySQLi - this article поможет вам решить, какой.

+0

Wow, те же самые точные ответы на почти то же самое точное время! –

+0

Спасибо за ваш ответ. Итак, вы имеете в виду, что мне нужно указать имена столбцов, которые я хочу вставить при попытке опустить любой столбец и при попытке вставить все столбцы, тогда мне не нужно указывать имена столбцов в инструкции insert? – user1788736

+1

@ user1788736 Правильно. Столбцы, которые имеют значение по умолчанию ('NULL',' AUTO INCREMENT' или иное), могут быть опущены из списка столбцов. – Kermit

2

Вы должны указать поля со вторым запросом. Если вы не собираетесь вставлять каждый столбец в порядке столбцов, вам нужно указать имена столбцов.

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

Вы можете использовать список столбцов или SET синтаксис

список Колонка:

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

SET Синтаксис:

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

0

В первой ошибки запроса не приходит, потому что вы указываете весь colum n и fieleds.Если какой-либо поданной является автоматическое приращение или по умолчанию 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"); 
    
Смежные вопросы