Значит ситуация такова:
Есть таблица в которой значения полей в которой null
Есть набор переменных:
$id=$_POST['id'];}
$num=$_POST['num'];}
$price=$_POST['price'];}
$rarity=$_POST['rarity'];}
$sell=$_POST['sell'];}
$coef=$_POST['coef'];}
Есть запрос:
$query="UPDATE `$dbName`.`$table` SET `num`='".$num."',`price`='".$price."',`coef`='".$coef."' WHERE `$table`.`id`='".$id."' LIMIT 1;";
Значения всех переменных - null, но после выполнения запроса в базе я вижу '0' вместо 'null'. В чем может быть причина?
1. highroller - 24 Сентября, 2015 - 12:35:51 - перейти к сообщению
2. OrmaJever - 24 Сентября, 2015 - 12:42:35 - перейти к сообщению
а вы бы вывели запрос да посмотрели, там примерно такая запись num = '', а должна быть вот такая num = null. Вот и думайте как это исправить
3. LIME - 24 Сентября, 2015 - 12:47:08 - перейти к сообщению
OrmaJever ошибаешься
При пустой строке и без not null будет именно null
highroller проверь настройки полей
Должно быть проставлено разрешение значения null по умолчанию
И тогда при пустой строке будет проставлен null
Конечно если не передается 0 явно
При пустой строке и без not null будет именно null
highroller проверь настройки полей
Должно быть проставлено разрешение значения null по умолчанию
И тогда при пустой строке будет проставлен null
Конечно если не передается 0 явно
4. highroller - 24 Сентября, 2015 - 12:50:53 - перейти к сообщению
LIME уже проверил, null разрешен, по умолчанию - null
Ноль точно не передается
Непосредственно перед запросом:
if ($num == null)echo 'TRUE'; результат - 'TRUE'
Ноль точно не передается
Непосредственно перед запросом:
if ($num == null)echo 'TRUE'; результат - 'TRUE'
5. LIME - 24 Сентября, 2015 - 12:53:35 - перейти к сообщению
Дык сам запрос выведи и смотри
Если сам не догонишь сюда его кидай
Вместе с таблицой в формате create
(Добавление)
$num === null
Если сам не догонишь сюда его кидай
Вместе с таблицой в формате create
(Добавление)
$num === null
6. Мелкий - 24 Сентября, 2015 - 13:17:50 - перейти к сообщению
LIME пишет:
При пустой строке и без not null будет именно null
Мне известны два варианта и ни в одном из них на пустую строку null'а нет.
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- mysql> CREATE TABLE test (
- -> id integer AUTO_INCREMENT PRIMARY KEY,
- -> numb int DEFAULT NULL
- -> ) engine=innodb;
- Query OK, 0 rows affected (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(1,NULL);
- Query OK, 1 row affected (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(2,0);
- Query OK, 1 row affected (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(3,'');
- Query OK, 1 row affected, 1 warning (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(4,'0');
- Query OK, 1 row affected (0.00 sec)
- mysql> SET sql_mode=STRICT_ALL_TABLES;
- Query OK, 0 rows affected (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(5,NULL);
- Query OK, 1 row affected (0.01 sec)
- mysql> INSERT INTO test (id,numb) VALUES(6,0);
- Query OK, 1 row affected (0.00 sec)
- mysql> INSERT INTO test (id,numb) VALUES(7,'');
- ERROR 1366 (HY000): Incorrect integer value: '' FOR COLUMN 'numb' at row 1
- mysql> INSERT INTO test (id,numb) VALUES(8,'0');
- Query OK, 1 row affected (0.00 sec)
- mysql> SELECT * FROM test;
- +----+------+
- | id | numb |
- +----+------+
- | 1 | NULL |
- | 2 | 0 |
- | 3 | 0 |
- | 4 | 0 |
- | 5 | NULL |
- | 6 | 0 |
- | 8 | 0 |
- +----+------+
- 7 rows IN SET (0.00 sec)
- mysql> SELECT version();
- +-----------------+
- | version() |
- +-----------------+
- | 5.5.44-0+deb8u1 |
- +-----------------+
- 1 row IN SET (0.00 sec)
highroller пишет:
В чем может быть причина?
В том, что вы зачем-то конкатенируете строку запроса с данными. Используйте нормальные prepared statements.