Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Значение по умолчанию
 
 автор: Mookapek   (31.08.2009 в 02:35)   письмо автору
 
 

Поле типа integer null, дефолтное значение NULL, если я записываю пустое значение, то выдается ошибка "Incorrect integer value: '' for column 'house_number' at row 1". А как сделать, чтобы при попытке записать пустое значение записывалось бы дефолтное NULL?

  Ответить  
 
 автор: !   (31.08.2009 в 03:02)
 
   для: Mookapek   (31.08.2009 в 02:35)
 

Так и записывать NULL в качестве значения, либо вообще поле не указывать.

  Ответить  
 
 автор: Mookapek   (31.08.2009 в 03:19)   письмо автору
 
   для: !   (31.08.2009 в 03:02)
 

Получается это Incorrect integer value: 'NULL' for column 'house_number' at row 1".
Не указывать поле - это надо делать многочисленные проверки на php.

  Ответить  
 
 автор: Valick   (31.08.2009 в 09:17)   письмо автору
 
   для: Mookapek   (31.08.2009 в 03:19)
 

Не указывать поле - это надо делать многочисленные проверки на php.
нет
INSERT INTO `tbl_name` (col1,col2) VALUES(10,15);

a col3 там где по дефолту NULL не указываете совсем

  Ответить  
 
 автор: а-я   (31.08.2009 в 09:36)   письмо автору
 
   для: Valick   (31.08.2009 в 09:17)
 

>a col3 там где по дефолту NULL не указываете совсем
т.к. сначала надо узнать что там ничего нет... а он не хочет через PHP..
хочет сразу чтоб мускул ставил NULL, если пустая строка.

но 0, "", NULL, FALSE - это все разные вещи... - это все равно что просить мускул вместо А писать Б в тексте.

может как то так:


$var = "";

INSERT INTO `tbl` SET  `col` = IF($var ='', null, $var )

  Ответить  
 
 автор: !   (01.09.2009 в 00:18)
 
   для: Mookapek   (31.08.2009 в 03:19)
 

> Получается это Incorrect integer value: 'NULL' for column 'house_number' at row 1".

Вот прямо так с апострофами пишите? NULL и 'NULL' -- разные вещи.

  Ответить  
 
 автор: Mookapek   (01.09.2009 в 00:34)   письмо автору
 
   для: !   (01.09.2009 в 00:18)
 

Согласен, ошибся. Ну это придется тогда проверять все переменные на содержание и в случае пустоты присваивать NULL, а этого бы не хотелось. Без этого вроде можно обойтись, но у меня есть некоторые затруднения.

  Ответить  
 
 автор: !   (01.09.2009 в 00:40)
 
   для: Mookapek   (01.09.2009 в 00:34)
 

Ну это смотря как проверять. Вы бы как это делали?

  Ответить  
 
 автор: Trianon   (01.09.2009 в 01:01)   письмо автору
 
   для: Mookapek   (01.09.2009 в 00:34)
 

>Согласен, ошибся. Ну это придется тогда проверять все переменные на содержание и в случае пустоты присваивать NULL,

Совершенно верный вывод.

>а этого бы не хотелось.

И вдруг откат.


>Без этого вроде можно обойтись, но у меня есть некоторые затруднения.

Почему без этого хочется обойтись, если Вы вроде уже пришли к выводу, что это сделать нужно?

  Ответить  
 
 автор: Mookapek   (01.09.2009 в 01:58)   письмо автору
 
   для: Trianon   (01.09.2009 в 01:01)
 

> Совершенно верный вывод.
Ну раз так говорит Trianon на том и остановлюсь.
Всем спасибо!

  Ответить  
 
 автор: Trianon   (31.08.2009 в 10:46)   письмо автору
 
   для: Mookapek   (31.08.2009 в 02:35)
 

показывайте текст запроса, который вызывает ошибку.

  Ответить  
 
 автор: Mookapek   (31.08.2009 в 22:03)   письмо автору
 
   для: Trianon   (31.08.2009 в 10:46)
 

CREATE TABLE tbl (
number INT,
name TINYTEXT NOT NULL
); - таблица

$number = '';
$name = "Вася";

Такой запрос INSERT INTO tbl VALUES ('$number', '$name') выдает Incorrect integer value: '' for column 'number' at row 1.
Если убрать кавычки с $number, т.е. INSERT INTO tbl VALUES ($number, '$name'), то выдает это You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'Вася')' at line 1.

  Ответить  
 
 автор: Trianon   (31.08.2009 в 22:56)   письмо автору
 
   для: Mookapek   (31.08.2009 в 22:03)
 

>CREATE TABLE tbl (
>number INT,
>name TINYTEXT NOT NULL
>); - таблица
>
>$number = '';
>$name = "Вася";
>
>Такой запрос INSERT INTO tbl VALUES ('$number', '$name') выдает Incorrect integer value: '' for column 'number' at row 1.

Само собой. number у Вас объявлено как число. А Вы туда строку (доллар с буквами) поместить пытаетесь.

>Если убрать кавычки с $number, т.е. INSERT INTO tbl VALUES ($number, '$name'), то выдает это You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'Вася')' at line 1.

Само собой. Потому что $number не является выражением на языке SQL.
'$number' - является выражением. Строковым. А $number не является. Вообще никаким.

SQL ничего не знает (и не может знать) о переменных php.
Сервер SQL зачастую вообще исполняется на другой машине, нежели крутится apache с php.

  Ответить  
 
 автор: Mookapek   (31.08.2009 в 23:04)   письмо автору
 
   для: Trianon   (31.08.2009 в 22:56)
 

Спасибо, что разъяснили, но может подскажете, как правильно сделать?

  Ответить  
 
 автор: Trianon   (01.09.2009 в 01:08)   письмо автору
 
   для: Mookapek   (31.08.2009 в 23:04)
 

$number = 5;
$name = 'Вася';


$n = is_null($number) ? 'NULL' : intval($number);
$s = is_null($name)   ? 'NULL' : ("'". mysql_real_escape_string($name) . "'");
$sql = "INSERT INTO `tbl`  (`number`,`name`) VALUES ($n, $s)";

echo $sql; 

  Ответить  
 
 автор: Mookapek   (31.08.2009 в 23:15)   письмо автору
 
   для: Trianon   (31.08.2009 в 22:56)
 

Так я же запрос в скрипте делаю , а не в MySQL Command Line Client!

  Ответить  
 
 автор: Trianon   (01.09.2009 в 01:04)   письмо автору
 
   для: Mookapek   (31.08.2009 в 23:15)
 

а скриптовый клиент mysql и command line клиент mysql ничем практически не отличаются.
И тот и другой формируют строки запросов к серверу.
Строки и того и другого клиентов должны быть полностью и окончательно сформированы перед отправкой.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования