2009-05-15 5 views
1

Может ли кто-нибудь сказать мне, почему, когда я произношу строку с ответом 00332, я возвращаюсь только назад 332? Он удаляет ведущие нули и сохраняет данные в том же формате.литье удаляет ведущие нули

Благодаря


this->_gate = (string) $this->_linkID->QuoteSmart($gate); 
+1

Вы производите строку в строку? Int в строку? Пожалуйста, дополните. –

+0

Да, строка для строки. Я новичок в том, чтобы набирать так ... – 2009-05-15 22:36:59

+0

Справа от вас! Что еще более странно, так это то, что я удалил все, кроме переменной, и STILL удалили ведущие нули. Что дает? – 2009-05-15 23:08:46

ответ

1

Я бы сказал, потому что ведущие нули не имеют значения при передаче в целое число.

Может быть, вы должны оставить его в виде строки, если вам нужны эти ведущие нули, и только отливать (int) на любой математике необходимо было выполнить (хотя вы могли бы просто использовать строку тоже, PHP будет понять это)

редактировать

Посмотрев пример, я хотел бы повторить значение, прежде чем бросить в строку (так что я могу подтвердить, что-то подозрительное не происходят с вами методом QuoteSmart (или значения отправляющим как пары , $ gate)

+0

Эй, Алекс. Ты на днях исцелил меня, спасибо за помощь! Я разместил выше образец. – 2009-05-15 22:36:02

+0

Вал, который я отправляю, 00432, и после его трансляции, я только закончил с сохранением 432 в базе данных. :/Итак, до кастинга, я могу повторить 00432, а потом получить только 432. Позвольте мне удалить функцию quotesmart и посмотреть, исправляет ли она это. brb – 2009-05-15 22:46:06

+0

Кроме того, Джим, какой тип находится на поле вашей БД? Это может повлиять на то, что также сохраняется в БД. – alex

0

Что ты брось и почему? Давайте посмотрим на код. Если вы отбрасываете целое число, да, целые числа не имеют ведущих нулей, поэтому они исчезают. Не удивительно.

+0

Пожалуйста, смотрите выше. Спасибо за помощь – 2009-05-15 22:35:33

2

Не бросать строки в строки, или любого типа того же типа, если на то пошло. Типизация - это изменение чего-то от одного типа к другому.

+0

@Jim, это действительно зависит, если вы принимаете пользовательский ввод, который ДОЛЖЕН быть числом (например, $ _GET ['id']), тогда было бы неплохо придать целому числу с (int) $ _GET [ 'ID']. Он сдует любой ведущий альфа-материал, и если он не сможет добраться до каких-либо полезных чисел, станет 0. – alex

+1

Однако другие меры предосторожности должны быть приняты в зависимости от контекста ... Например, vars, напечатанные на странице, должны быть htmlspecialchars() 'd и vars в запросе базы данных должны быть mysql_real_escape_string или эквивалент для вашей БД. Фактически, просто используйте параметризованные запросы. Посмотрите www.php.net/pdo – alex

+0

Хорошо, это имеет смысл. Я думаю, что Алекс может иметь точку зрения о функции quotesmart, изменяющей выход. Я собираюсь удалить его и посмотреть, что я получу. – 2009-05-15 22:47:22

1
$ php -r 'var_dump((string)"00123");' 
string(5) "00123" 

Похоже, что актер не является вашей проблемой.

+0

Спасибо за это. Именно это заставило меня искать проблему в другом месте. :) – 2009-05-15 23:47:53

0

ОК, вот почему он отбрасывал ведущие нули. Это не было литье и не добавляет. То, что я сделал, это процитировать переменную (которую кавычки должны делать так или иначе, но не по какой-то причине). Когда я привел эту переменную, я правильно сохранил значение. Если Im не ошибается, quotesmart будет работать только на строки и не ints.

Смежные вопросы