|
|
|
| Поле типа 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 в качестве значения, либо вообще поле не указывать. | |
|
|
|
|
|
|
|
для: !
(31.08.2009 в 03:02)
| | Получается это Incorrect integer value: 'NULL' for column 'house_number' at row 1".
Не указывать поле - это надо делать многочисленные проверки на php. | |
|
|
|
|
|
|
|
для: Mookapek
(31.08.2009 в 03:19)
| | Не указывать поле - это надо делать многочисленные проверки на php.
нет
INSERT INTO `tbl_name` (col1,col2) VALUES(10,15);
|
a col3 там где по дефолту NULL не указываете совсем | |
|
|
|
|
|
|
|
для: 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' -- разные вещи. | |
|
|
|
|
|
|
|
для: !
(01.09.2009 в 00:18)
| | Согласен, ошибся. Ну это придется тогда проверять все переменные на содержание и в случае пустоты присваивать NULL, а этого бы не хотелось. Без этого вроде можно обойтись, но у меня есть некоторые затруднения. | |
|
|
|
|
автор: ! (01.09.2009 в 00:40) |
|
|
для: Mookapek
(01.09.2009 в 00:34)
| | Ну это смотря как проверять. Вы бы как это делали? | |
|
|
|
|
|
|
|
для: Mookapek
(01.09.2009 в 00:34)
| | >Согласен, ошибся. Ну это придется тогда проверять все переменные на содержание и в случае пустоты присваивать NULL,
Совершенно верный вывод.
>а этого бы не хотелось.
И вдруг откат.
>Без этого вроде можно обойтись, но у меня есть некоторые затруднения.
Почему без этого хочется обойтись, если Вы вроде уже пришли к выводу, что это сделать нужно? | |
|
|
|
|
|
|
|
для: Trianon
(01.09.2009 в 01:01)
| | > Совершенно верный вывод.
Ну раз так говорит Trianon на том и остановлюсь.
Всем спасибо! | |
|
|
|
|
|
|
|
для: Mookapek
(31.08.2009 в 02:35)
| | показывайте текст запроса, который вызывает ошибку. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2009 в 22:56)
| | Спасибо, что разъяснили, но может подскажете, как правильно сделать? | |
|
|
|
|
|
|
|
для: 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;
|
| |
|
|
|
|
|
|
|
для: Trianon
(31.08.2009 в 22:56)
| | Так я же запрос в скрипте делаю , а не в MySQL Command Line Client! | |
|
|
|
|
|
|
|
для: Mookapek
(31.08.2009 в 23:15)
| | а скриптовый клиент mysql и command line клиент mysql ничем практически не отличаются.
И тот и другой формируют строки запросов к серверу.
Строки и того и другого клиентов должны быть полностью и окончательно сформированы перед отправкой. | |
|
|
|