Перейти к содержимому


Фото
- - - - -

Отправить в базу значение NULL


  • Чтобы отвечать, сперва войдите на форум
13 ответов в теме

#1 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 15:05

В Симпле запросы к БД формируются функцией placehold в виде

 

$query = $this->db->placehold("UPDATE __variants SET ?%  WHERE id=? LIMIT 1", $variant, intval($id)); 

 

Если $variant содержит название поля и число, запрос выполняется правильный

 

UPDATE s_variants SET stock=10000  WHERE id=999 LIMIT 1
 

Но если содержит название поля и null вместо числа, в бд передаётся 'null' в кавычках, которое затем превращается в 0 (ноль) в базе.

Не пойму, как передать значение без кавычек.


Изменено: question, 06.02.2019 - 15:10


#2 phukortsin

phukortsin
  • Фрилансер
  • 879 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.02.2019 - 15:18

$variant->stock=null;
$query = $this->db->placehold("UPDATE __variants SET ?%  WHERE id=? LIMIT 1", $variant, intval($id));


Изменено: phukortsin, 06.02.2019 - 15:59


#3 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 15:45

$variant->stock=null;

Не работает.



#4 phukortsin

phukortsin
  • Фрилансер
  • 879 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.02.2019 - 16:00

Работает.

Поправил ошибку во второй строчке...



#5 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 16:03

Во второй строчке была опечатка, это я сразу заметил, но 

$variant->stock=null; не работает.



#6 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 16:10

echo $this->db->placehold("?%", $variant);
 

 

выведет 

 

stock='9'
 

 

Мне же нужно без кавычек в случае, если числа нет, или значение пустое.



#7 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 17:44

Не понимаю, как сохраняется "бесконечное количество" товара через админку.



#8 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 17:51

Нашёл такую конструкцию.

 

$variant->infinity
 

Видимо, она и передаёт значение null в БД.



#9 Kosjak76

Kosjak76
  • Модератор
  • 3 829 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 06.02.2019 - 18:03

							if($variant->stock == '∞' || $variant->stock == '')
								$variant->stock = null;

Вот это отлично работает

А $variant->infinity не имеет отношения к базе и ничего не передает



#10 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 18:39

Помогла такая конструкция

 

        foreach($variant as &$v){
            if($v == '∞' || $v == '')
                $v = null;
        }
 

 


Изменено: question, 06.02.2019 - 18:43


#11 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 06.02.2019 - 18:44

							if($variant->stock == '∞' || $variant->stock == '')
								$variant->stock = null;

Понятия не имею, почему ваш код не работает. Мой сработал, когда я подставил амперсант (&$v)



#12 phukortsin

phukortsin
  • Фрилансер
  • 879 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.02.2019 - 19:03

Все прекрасно работает.
Вставляю код в корневой index.php в конец
 

$variant=new stdclass();
$variant->stock=null;
$id=5;
$query = $view->db->placehold("UPDATE __variants SET ?%  WHERE id=? LIMIT 1", $variant, intval($id));
echo $query;

Получаю

UPDATE s_variants SET stock=NULL WHERE id=5 LIMIT 1

Скорее всего, Вы сами наворочали уже много чего...


Изменено: phukortsin, 06.02.2019 - 19:04


#13 shooroop

shooroop
  • Фрилансер
  • 900 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 08.02.2019 - 11:27

Все прекрасно работает.
Вставляю код в корневой index.php в конец
 

$variant=new stdclass();
$variant->stock=null;
$id=5;
$query = $view->db->placehold("UPDATE __variants SET ?%  WHERE id=? LIMIT 1", $variant, intval($id));
echo $query;

Получаю

UPDATE s_variants SET stock=NULL WHERE id=5 LIMIT 1

Скорее всего, Вы сами наворочали уже много чего...

 

 

У него новая своя админка.

 

Корс с каких пор ты занимаешься благотворительностью?



#14 question

question
  • Пользователь
  • 275 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 08.02.2019 - 12:09

Там не своя админка, а разные версии. Какая у меня, не знаю, но точно не из самых последних.

Да и разница в вашем примере и моём по сути минимальная.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых