массивы, isset и NULL из MySQL
17 сентября 2011, 3:24
Автор: 1234ru
Существует случай, когда isset($array['something']) вернет FALSE, даже когда элемент 'something' установлен (хотя это и не очевидно).
Этот случай - когда $array['something'] содержит NULL.
Встречаться это может при получении данных из MySQL, когда соответствующие ячейки содержат NULL:
В PHP:
Такое поведение isset() отражено в документации:
Однако на практике в PHP хранение величин NULL встречается редко, и о такой особенности можно позабыть.
Этот случай - когда $array['something'] содержит NULL.
Встречаться это может при получении данных из MySQL, когда соответствующие ячейки содержат NULL:
mysql> CREATE TABLE t (i INT);
Query OK, 0 rows affected (0.23 sec)
mysql> INSERT INTO t VALUES ();
Query OK, 1 row affected (0.06 sec)
mysql> SELECT * FROM t;
+------+
| i |
+------+
| NULL |
+------+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.23 sec)
mysql> INSERT INTO t VALUES ();
Query OK, 1 row affected (0.06 sec)
mysql> SELECT * FROM t;
+------+
| i |
+------+
| NULL |
+------+
1 row in set (0.02 sec)
В PHP:
$sql = "SELECT i FROM t";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
print_r($row); // Array ( 0 => )
// как видно, элемент присутствует в массиве
// несмотря на это, isset возвращает FALSE:
echo (isset($row) == FALSE); // TRUE
// единственный путь установить истину -
// использование функции array_key_exists:
echo array_key_exists(0, $row); // TRUE
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
print_r($row); // Array ( 0 => )
// как видно, элемент присутствует в массиве
// несмотря на это, isset возвращает FALSE:
echo (isset($row) == FALSE); // TRUE
// единственный путь установить истину -
// использование функции array_key_exists:
echo array_key_exists(0, $row); // TRUE
Такое поведение isset() отражено в документации:
Цитата:
isset — Determine if a variable is set and is not NULL
Однако на практике в PHP хранение величин NULL встречается редко, и о такой особенности можно позабыть.