Не находит существующие значения в БД MySql

neatod

Всем привет.
Суть проблемы:
_ загружаю на сервер файл .csv с целью обновить цены в магазине
_ файл содержит только артикул и цену товара
_ извлекаю содержимое файла (артикул) и ищу в базе (MySql) соответствующее значение
_ артикулы представлены только цифрами без букв (к примеру 11033)
_ в итоге процентов 10 записей он не находит, но они точно есть
_ Field (article) | Type (varchar) | Collation (utf8_general_ci)

 

Drunkenmunky

Попробуйте заменить на int
Предварительно сохранив копию таблицы.

 

neatod

К сожалению это нельзя делать, т. к. предполагается, что будут ещё артикулы и с буквами.

 

Drunkenmunky

Это зря.
Похоже, что в части записей(в таблице или csv) есть лишние символы. Пробелы например.

 

neatod

Нет. В коде я пишу $article = trim($csv[article]);

 

Drunkenmunky

Это легко проверить.
Сформируйте запрос из $csv[article] и запросите на вывод.
Сравните количество.

 

neatod

Это какой-то полтергейст))
Я уже тупо через if(){} сравниваю $csv[article] с таким же числом, и он пишет, что они не совпадают

 

Drunkenmunky

Как сравниваете?

 

neatod

if($csv[article] == 11019){
Вывожу результат сравнения
}

При этом:
echo $csv[article];
Выводит 11019

 

Drunkenmunky

Заключите 11019 в кавычки, если $csv[article] строка.

 

neatod

Попробовал, не помогло

Дальше идут значения 6919, 699
они при таком сравнении выдают успех

 

Drunkenmunky

Ну, гадать можно до морковкиного заговенья.
Выгрузите таблицу и csv.

 

neatod

Не совсем понял задачу. Подробнее напишите пожалуйста что нужно сделать?

Кстати, проверил длину значения strlen($csv[article]) выдаёт 8, почему? Если должно быть 5?

 

Drunkenmunky

Лишние символы.
Или часть из них не цифры.

 

neatod

Нашёл решение) .csv файл перекодировал в utf-8 без ВОМ и всё заработало.
И всё же остаётся вопрос, если человек загрузит .csv в кодировке с ВОМ, как решить эту проблему?

 

Drunkenmunky

Удалять этот самый BOM.
Другое дело, почему он у вас в нескольких строках.
Это три или четыре символа в самом начале файла.

 

neatod

Всё ОК. Моя ошибка. Остальные товары просто ещё не добавлены в базу))
Я их со страху тоже причислил к проблемным)

Спасибо за помощь!

 

MouseZver

Warning: Use of undefined constant article — assumed ‘article’
— Добавлено —

потому что — функция strlen подсчитывает количество байт, а не число символов в строке. Почему должно 5, когда там 8 байт ?

  • Чтобы посчитать сколько символов в строке, оптимально — mb_strlen
  • Чтобы узнать (не)пуста ли строка / переменная — конструкция empty. Но и в ней есть нюансы, например: ‘0’ — это будет считаться как пустая строка
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *