[0]=> bool(false) в конце массива

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

У меня есть массив, который выглядит следующим образом:

 $object = array(filed1=>newvalue1,field2=>newvalue2,field3=>newvalue3);
 

Мне нужно проверить это с помощью mysql_real_escape_string и передать его в mysql

 foreach ($object as $key => $value)
    {
        $key = mysql_real_escape_string($key . '');
        $value = mysql_real_escape_string($value . '');
        $object[$key] = $value;
    }
 

В конце он возвращает следующий массив:

 array(4) { 
          ["filed1"]=> string(9) "newvalue1" 
          ["field2"]=> string(9) "newvalue2" 
          ["field3"]=> string(9) "newvalue3" 
          [0]=> bool(false) 
         } 
 

Как и почему появился последний [0]=> bool(false)? Как мне его удалить?

P.S. пожалуйста, никаких советов «использовать PDO»… это мое домашнее задание, и PDO — это не вариант. Спасибо.

Комментарии:

1. сделали ли вы var_dump($object) ?

2. mysql_real_escape_string возвращает false при ошибке

3. Хотя почему вы объединяете ключи и значения с пустой строкой?

4. Я должен предостеречь вас от обновления массива внутри foreach, это заставляет PHP создавать новую копию массива в каждом цикле и крайне неэффективно. Рассмотрите возможность использования: foreach ($object as amp;$key => amp;$value) { $key = mysql_real_escape_string($key . ''); $value = mysql_real_escape_string($value . ''); } вместо.

5. да, я использовал var_dump($object), чтобы понять, почему вывод был не тем, что мне нужно

Ответ №1:

Здесь у вас есть две проблемы.

Во-первых, mysql_real_escape_string требуется подключение. Если вы его не создали, он попытается создать его путем вызова mysql_connect без параметров и, в случае сбоя последнего, вернет логическое значение FALSE .

Во-вторых, хотя кажется, что ваше намерение состояло в том, чтобы обновить исходные $object ключи, на самом деле вы обновляете те, которые возвращены mysql_real_escape_string .

 $key = mysql_real_escape_string($key . '');

// This sets $key to FALSE

$value = mysql_real_escape_string($value . '');

// This sets $value to FALSE

$object[$key] = $value;

// $object[FALSE] = FALSE;
 

Последний оператор добавляет дополнительную запись при первом запуске и обновляет ее (с тем же значением) при следующих запусках.

Комментарии:

1. Спасибо. действительно, у меня не установлено соединение. это был просто пример кода без базы данных 🙂

2. @metamorph_online: mysql_escape_string , теперь устаревшая функция, не требует подключения и не позволяет безопасно экранировать строки (поскольку то, что именно экранировать, зависит от кодировки соединения).