#php #mysql #codeigniter
#php #mysql #codeigniter
Вопрос:
Я сохраняю 5-значные почтовые индексы в таблицах MySQL как CHAR (5). Однако, когда почтовый индекс с начальными нулями (т. Е. 02138) извлекается из таблиц, он становится 2138. Поскольку он хранится в таблицах как 02138 (проверено с помощью phpmyadmin), это связано с тем, что PHP удаляет начальный 0? Как я могу убедиться, что я сохраняю начальный 0?
Я использую довольно длинную строку SQL-запроса, используя activerecords в codeigniter.
foreach($q as $row){
/// bunch of code that adds more elements to the $row array
$data['rows'][] = $row;
}
Комментарии:
1. Покажите код, в котором вы извлекаете значение из базы данных и где вы его отображаете
2. Теперь покажите код, в котором вы отображаете почтовый индекс. PHP преобразует строку из всех цифр в числовой тип, но только если он считает, что это необходимо. Используете ли вы поле почтового индекса где-либо еще?
Ответ №1:
str_pad($zip, 5, 0, STR_PAD_LEFT);
Комментарии:
1. Это должно быть сделано, если у нас есть $ zip в качестве числового значения. Это скорее обходной путь. Здесь мы должны найти корень проблемы.
2. ваше решение работает отлично, но это больше похоже на обходной путь, когда мы скрываем корень проблемы.
Ответ №2:
Что вам нужно, так это MySQL ZEROFILL. Укажите столбец как нулевое заполнение.
Комментарии:
1. я уже сохранил его как 02138 как CHAR (5) с начальным 0. Мне все еще нужно заполнение нулем?
2. ДА. Если поле является целым числом, ноль не сохраняется. Мне также нравится решение @ tandu, приведенное ниже.
3. Как это может работать с международными кодами? Казалось бы, для этого решения потребуется более 5 символьных пробелов, что добавило бы слишком много нулей.
Ответ №3:
отображать его как текст, а не как число
Комментарии:
1. как мне заставить его отображаться в виде текста в php? Я предполагаю, что php автоматически преобразуется в число, когда видит все его цифры?
2. Вы должны установить свой тип данных для поля как varchar(10) — это установит длину вашего поля в 10 символов. Я говорю 10 для почтового индекса в стиле 5 4. В противном случае varchar (5) должен работать. Поскольку int не начинается с 0, 0 удаляется.
3. Привет — как он добавляется? Возможно, ваш код удаляет начальный ноль. Я только что протестировал добавление 06605 к набору полей с помощью varchar (255), и это не привело к удалению начального нуля.
Ответ №4:
В качестве быстрого решения проблемы смотрите версию @tandu. Но здесь вы должны найти корень проблемы. Что происходит, понятно — где-то PHP преобразует строку «012345» в int 12345. Итак, теперь вы должны каким-то образом найти, кто это делает и когда. var_dump
значения и посмотрите, являются ли они строковыми или int.
Возможно, где-то в вашей среде вы указываете тип столбца как числовой, но на самом деле он является символом в вашей БД.