[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как записать в таблицу NULL ?
Владимир55
Информация заносится в базу с помощью кода:
mysql_query("INSERT INTO kattov (artikul, name_tov, cena) 
VALUES ('
$artikul', '$name_tov', '$cena')");

При этом возможна ситуация, когда $cena = 0. Как можно для этого случая записать в соответствующую ячейку таблицы значение NULL ?

И можно ли это сделать вообще?

==========
Пробовал решить проблему так:
if ($cena == 0) $cena = '';
if ($cena == 0) unset ($cena)';
if ($cena == 0) $cena = '
NULL';
if ($cena == 0) $cena = '
IS NULL';

Бесполезно! Во всех случаях в таблицу пишется "0" !
Valick
в самой базе поддерживается (установлен) для данного поля тип NULL?
если да, то в запросе пишите NULL без кавычек и прочего

_____________
Стимулятор ~yoomoney - 41001303250491
Владимир55
В самой базе в тех полях, которые не участвуют в записи (записываем не во все поля), присутствует NULL.

Я сделал так:

if ($cena == 0) $cena = NULL;


Все равно, в базе "0".

В чем еще может быть причина?
Valick
дайте дамп таблицы и сам код

_____________
Стимулятор ~yoomoney - 41001303250491
Владимир55
if ($cena == 0) $cena = NULL;
mysql_query("INSERT INTO kattov (artikul, name_tov, cena) VALUES ('$artikul', '$name_tov', '$cena')");



Как вложить файл с дампом на этом флоруме я не понял, поэтому привожу его в сообщении:

== Структура таблицы kattov

|------
|Поле|Тип|Null|По умолчанию
|------
|//**id**//|int(11)|Нет|
|group_id|int(6)|Да|NULL
|**producer**|varchar(100)|Да|NULL
|**artikul**|varchar(50)|Да|NULL
|**name_tov**|varchar(400)|Да|NULL
|cena|int(10)|Да|NULL
|kol|int(6)|Да|NULL
|guid|varchar(40)|Да|NULL
== Дамп данных таблицы kattov

|1|1| |855466524-221|Проба|0|0|NULL

== Структура таблицы kattov

|------
|Поле|Тип|Null|По умолчанию
|------
|//**id**//|int(11)|Нет|
|group_id|int(6)|Да|NULL
|**producer**|varchar(100)|Да|NULL
|**artikul**|varchar(50)|Да|NULL
|**name_tov**|varchar(400)|Да|NULL
|cena|int(10)|Да|NULL
|kol|int(6)|Да|NULL
|guid|varchar(40)|Да|NULL
Valick
('$artikul', '$name_tov', '$cena')

('$artikul', '$name_tov', $cena)


_____________
Стимулятор ~yoomoney - 41001303250491
xlebosol
Если поле установлено по умолчанию как NULL то и не надо ничего записывать в это поле, оно все равно будет NULL.
Valick
xlebosolэ если изначально, то да, а если надо перезаписать уже имеющееся значение?


_____________
Стимулятор ~yoomoney - 41001303250491
FatCat
Цитата (Valick @ 24.01.2013 - 02:02)
если надо перезаписать уже имеющееся значение?

У меня тоже не получалось при UPDATE установить значение NULL, только при INSERT не задав поля в перечислении. Правда никогда и не требовалось. Наверное тремя запросами решается: прочитать строку, удалить строку, создать строку.

_____________
Бесплатному сыру в дырки не заглядывают...
Владимир55
Цитата (Valick @ 23.01.2013 - 19:05)
('$artikul', '$name_tov', '$cena')

('$artikul', '$name_tov', $cena)

Почему так? Почему этой переменной такие привелегии?

Каковы общие правила в этом отношении - когда кавычки нужны, а когда они даже мешают?
Владимир55
Практика дала такой результат:
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 ' '0')' 
Placido
Используй подготовленные выражения, например, с помощью mysqli.
    $mysqli = new mysqli("host", "user", "password", "db");
$null = null;
$stmt = $mysqli->prepare("INSERT INTO `kattov` (`cena`) VALUES (?)");
$stmt->bind_param("i", $null);
$stmt->execute();
//результат в поле `cena` - NULL

$null = '';
$stmt = $mysqli->prepare("INSERT INTO `kattov` (`cena`) VALUES (?)");
$stmt->bind_param("i", $null);
$stmt->execute();
//результат в поле `cena` - 0
Владимир55
Без ООП это можно реализовать?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.