#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
, теперь устаревшая функция, не требует подключения и не позволяет безопасно экранировать строки (поскольку то, что именно экранировать, зависит от кодировки соединения).