Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Чудеса конкатенации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Граф
Отправлено: 25 Января, 2017 - 17:10:04
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




Здравствуйте. Прошу помощи. Огорчение
Имеется примерно такой код:
PHP:
скопировать код в буфер обмена
  1. $userid = '9223372036854775807';
  2. $craft = '10021';
  3. $user_craft = $userid.'_'.$craft;


Все 3 переменные записываются в БД.
В итоге в колонке `user_craft`(тип - varchar) вижу '11282821117685064658_10021'.
Две другие переменные проблем не имеют.
Проблема не постоянна, возникает периодически.
Почему это может происходить?

(Отредактировано автором: 25 Января, 2017 - 17:31:06)

 
 Top
OrmaJever Модератор
Отправлено: 25 Января, 2017 - 17:25:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




что вы в бд пишите - то она и хранит, смотрите данные которые записываете


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Граф
Отправлено: 25 Января, 2017 - 17:29:31
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




OrmaJever пишет:
Смотрите что вы туда пишите.

Я ожидал, что он запишет 9223372036854775807_10021.
Записывая вместо этого 11282821117685064658_10021, господин php наверное чем-то мотивировался?...
 
 Top
OrmaJever Модератор
Отправлено: 25 Января, 2017 - 17:31:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




то есть вы уверены что во время записи в переменой было значение 9223372036854775807_10021, а не 11282821117685064658_10021 ?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Граф
Отправлено: 25 Января, 2017 - 17:38:45
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




OrmaJever пишет:
то есть вы уверены что во время записи в переменой было значение 9223372036854775807_10021, а не 11282821117685064658_10021 ?

По крайней мере, судя по тем же записям в бд, я уверен, что $userid = '9223372036854775807' и $craft = '10021';
К сожалению, проблема не воспроизводится, я не могу вывести и посмотреть переменную $user_craft. (точнее могу, но она всегда в порядке). Проблему я наблюдаю уже записанной в БД. Не всегда, периодически.
 
 Top
index
Отправлено: 25 Января, 2017 - 18:19:08
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




Граф пишет:
К сожалению, проблема не воспроизводится, я не могу вывести и посмотреть переменную $user_craft. (точнее могу, но она всегда в порядке).
Почему нельзя вывести эту переменную перед записью в БД?
 
 Top
Граф
Отправлено: 25 Января, 2017 - 18:31:56
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




index пишет:
Почему нельзя вывести эту переменную перед записью в БД?

Её можно вывести. Просто у меня ошибка не воспроизводится. Выводится нормальная переменная, но и в базу нормальная попадает.
Я уже и логинился под этими проблемными id. Вбестолку. У них проблема появляется, у меня нет. Огорчение

(Отредактировано автором: 25 Января, 2017 - 18:40:03)

 
 Top
index
Отправлено: 25 Января, 2017 - 18:47:42
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




А, ну то есть, ошибка редко возникает, понятно. Тогда навскидку, чтобы отловить её, я бы сделал лог двух переменных (до конкатенации и после). Перед каждой записью в БД записывать куда-нибудь в файл. Или можно прямо в базу данных, в таблице сделать дополнительное поле, где будет первая половинка, которая до конкатенации. Тогда можно будет заметить, когда именно возникает ошибка, а также станет ясно, в конкатенации эта ошибка или в базе данных.
 
 Top
Граф
Отправлено: 26 Января, 2017 - 11:21:30
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




index пишет:
лог двух переменных (до конкатенации и после)

В этом случае наполовину это уже было сделано: в базу всегда пишутся обе половинки. Пишутся без ошибок, что говорит о том, что с ними всё норм.
Следуя вашему совету, я дописал такую вещь:
PHP:
скопировать код в буфер обмена
  1. $exuid = explode('_',$user_craft);
  2.         if($exuid[0] != $userid)
  3.         mysqli_query($link, "INSERT INTO `errors`.... итд")

Сегодня утром обнаружил кучу записей с той же ошибкой, и при этом абсолютно пустой лог.
Я так понимаю, что какие-то "чудеса" происходят на этапе записи в БД, поскольку php не показывает никаких симптомов...
 
 Top
OrmaJever Модератор
Отправлено: 26 Января, 2017 - 16:34:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Граф но ведь вы так и не показали код записи в бд где будет вся жизнь этих переменных


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Граф
Отправлено: 26 Января, 2017 - 22:00:44
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2017  


Помог: 0 раз(а)




OrmaJever пишет:
вы так и не показали код записи в бд

Он следующий:
PHP:
скопировать код в буфер обмена
  1. for ($i=0; $i < count($craftarr); $i++) {
  2. $user_craft = $userid.'_'.$craftarr [$i];
  3. $sql = "INSERT INTO `user_crafts` (
  4. `user_craft`, `item_id` , `user_id`, `isbest`, `craft_id`, `craft_price`, `auc_price` ,`updated`)
  5. VALUES ( '".$user_craft."', '".$itemarr[$i]."', '".$userid."', '".$bestcraft[$i]."', '".$craftarr[$i]."', '".$mycostarr[$i]."', '".$auccraft[$i]."' ,now())
  6. ON DUPLICATE KEY UPDATE `isbest` = '".$bestcraft[$i]."', `craft_price` = '".$mycostarr[$i]."', `auc_price` = '".$auccraft[$i]."',`updated` = now()"
  7. mysqli_query($link, $sql) or die(mysqli_error($link));
  8. }

(Отредактировано автором: 28 Января, 2017 - 23:39:24)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB