Проверка на NULL

программирование php проблема JavaScript базы данных

javascript по клику загружает данные из html таблицы в форму:

document.getElementById("middlename").value = (document.getElementById(msg.id).getElementsByTagName("td")[2].innerHTML);

из формы отправляем PHP скрипту:

$years=$_REQUEST['years'];

скрипт записывает в БД:

$sql="UPDATE users SET years= '$years' WHERE id='$id';

Тип строки в БД Integer, значение по умолчанию NULL

всё хорошо, но иногда в таблице значения years нет, а в БД записывается 0
Добавил в начало PHP скрипта проверку:

if ($_REQUEST['years'] == "") {
$years = NULL;
} else {
$years = $_REQUEST['years'];
}

и всяко-разно пробовал, никак не срабатывает присвоение NULL

Примечание:
document.getElementById("years").value = (document.getElementById(msg.id).getElementsByTagName("years")[2].innerHTML);
разумеется (забыл исправить)

Примечание:
Да, а как по другому? Это дифолтное значение

Примечание:
UPDATE `ххххх`.`users` SET `years` = NULL WHERE `id` =708;
из phpmyadmin выполняется без проблем

Примечание:
if ($_REQUEST['years'] == "") {
$years = 9999;
} else {
$years = $_REQUEST['years'];
}

присваивает 999
не так null передаю что-ли?

Примечание:
похоже понял

Примечание:
Проблема была тут:
$sql="UPDATE users SET years= '$years' WHERE id='$id';

какое бы значение NULL к $years я не присваивал, оно в SQL запросе заключалось в 'NULL', убрал кавычки, всё заработало

всем спасибо

Примечание:
ничего подобного, оно запрос просто не срабатывает теперь

Примечание:
как присвоить NULL либо число в одном PHP скрипте? не убирать же кавычки каждый раз если значение NULL?

Примечание:
Можно конечно каждый раз делать ещё запрос:

UPDATE users
SET years= NULL
WHERE years= 'NULL'

но это явно не оптимальное решение

Примечание:
2 NetRain: непонятно к чему Вы написали тоже самое что и я?

В итоге я видимо уберу кавычки в SQL и буду их добавлять в присвоении если значение не NULL

if ($_REQUEST['years'] == "") {
$years = NULL;
} else {
$years = "'".$_REQUEST['years']."'";
}

SQL:
$sql="UPDATE users SET years= $years WHERE id='$id';

так должно заработать я думаю
Ответы:
А столбцу years БД разрешено иметь значение NULL?
> Примечание №8
кавычки — это обозначение строки. Т. е. вы присваиваете строку числовому полю БД. Поскольку поле числовое, то MySQL при выполнении запроса неявно приводит типы. Причем строка 'NULL' приводится к числу 0.
Так что уберите кавычки раз и навсегда. И будет у вас одно из двух:
UPDATE users SET years = 999 WHERE id = 777
UPDATE users SET years = NULL WHERE id = 777
Ну или еще так: UPDATE users SET years = NULL WHERE years IS NULL
Как видите, кавычек здесь нет. И это правильнее.
Конечно, теперь нельзя забывать проверять входящие данные на числовое значение, иначе запрос может оказаться неверным.
> Примечание №10
Я вам написал к тому, что кавычки вам не нужны вне зависимости от значения (хоть null, хоть не null), если правильно выбран тип поля years.
А вот это — $years = "'".$_REQUEST['years']."'" — ужас и только. Сразу две проблемы: инъекция + приведение типов где не нужно.


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.