Не могу понять поведение кода PHP


Dram
145

Не понимаю как банальный Селект в базу может вносить изменения в переменную?  (в коде сделал пометки)

     ...........

       try {
                if (strlen($review) > 100) {

//первая проверка - нет ли уже в базе отзывов с таким именем в это время
// если поднять сюда file_put_contents('/test.txt то проблем нет, все отзывы на месте

                    $proverka = $conn->query("SELECT id FROM ....'");
                    $result_proverka = $proverka->fetchAll(PDO::FETCH_ASSOC);

                    $str100 = substr($review,0,100);

// если поднять сюда file_put_contents('/test.txt то проблем нет, все отзывы на месте

//вторая проверка - проверяю первые 100 символов отзыва (так как отзывы на сайт приходят из разных мест и могут быть одинаковые отзывы, а авторы разные)
 
                    $proverka2 = $conn->query("SELECT * FROM `xy_comments` WHERE `object_group` = 'com_firm' AND `object_id` = '{$result[0]['id']}' AND `description` LIKE '{$str100}%' ORDER BY `xy_comments`.`id` DESC limit 100");
                    $result_proverka2 = $proverka2->fetchAll(PDO::FETCH_ASSOC);

//и вот тут магия - после второго селекта пропадает часть отзывов - WTF???  Стоит его закомментировать и все отзывы запишутся в test.txt
                    if(!empty($_SERVER['REMOTE_ADDR'])){
                        file_put_contents('/test.txt', $author.'---'.$review. PHP_EOL, FILE_APPEND | LOCK_EX);
                    }

..........


Dram

Причина найдена — из-за спец. символов в отзывах  второй запрос в базу заканчивался ошибкой, а так как у меня Трай-Кетч, то я не видел ошибки. 

mb_substr вместо substr решило проблему


miketomlin
Dram #:
а так как у меня Трай-Кетч, то я не видел ошибки

Трай/кятч нужен, чтобы ловить ошибки, а не терять 😉


miketomlin
Dram :
file_put_contents(‘/test.txt’

Это сильно! Под виндами что ли работаешь?


miketomlin
Dram :
$str100 = substr($review,0,100);

Однобайтовая кодировка? И не насыщенный форматированием текст?

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

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