Posted 29 мая, 20222 yr comment_181917 Столкнулся с неистово неизвестной проблемой Вывожу из базы данных mssql значения через PHP(IPS) и получаю нужное мне значение. Все конечно хорошо, но если бы не одно но - Выводится рандомной кодировкой каждый раз. То есть я захожу на страницу где должно выводиться значение, вижу что там все хорошо, пару раз обновил страницу, тоже все хорошо. Но стоит мне обновить страницу через минуту - две, получается интересный результат, значение поменялось, хотя код и база не редактировалась. Это до обновления страницы: Это после обновления страниче через пару минут: Если я обновлю страницу через опять же пару минут, получу обратный результат. Т.е получается оно меняется будто по таймеру определенному, хотя код до боли простой... Данная проблема только с Русскими символами происходит Код <?php try { $mssqlprovide = 'odbc'; $mssqldriver = '{ODBC Driver 17 for SQL Server}'; $hostname = 'IP'; $username = 'Name'; $password = 'Pass'; $dbWorld = 'Base'; $tblBase = 'Таблица'; $conn = new PDO("$mssqlprovide:Driver=$mssqldriver;Server=$hostname;Database=$dbWorld;", $username, $password); $sql_fetch = $conn->prepare("SELECT CAST(CAST([Name] AS VARCHAR(18)) AS TEXT) AS Name FROM tbl_base WHERE Serial = 5"); $sql_fetch->execute(); foreach ($top_lvl->fetchAll() as $row) { $t = $row['Name']; echo $t; echo "<br><hr>"; } } catch(Exception $e) { echo $e; } Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/ Share on other sites Больше вариантов
29 мая, 20222 yr comment_181921 А этот код где выполняется? В блоке каком-то или просто новый файл .php где-то отдельно? Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181921 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181923 Где бы не выполнял, результат один) Выполнял в своём приложение через class do И отдельным файлом чистым Так же и на локалке(Компе) Ост выполняется на VPS сервере Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181923 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181926 Касаемо обновления результата через какое-то время, кмк, это вероятно какие-то кешированные значения. Либо блока IPS, либо кеша PHP, opcache например. Т.е. если код будет отредактирован сейчас, то его изменения произойдут через какое-то время (зависит от настроек). Можно попробовать добавить вывод значения не на экран, а в логи (файл, или еще куда-то), чтобы отсечь возможные варианты с какими-то внешними прослойками. Или отдебажить локально, посмотреть на значения переменных. Непохоже на проблемы с кодировкой, т.к. текст получился транслитирированным, если бы у него слетела кодировка, там были бы кракозябрики или вопросики Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181926 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181928 $sql_fetch->execute(); foreach ($top_lvl->fetchAll() as $row) { Это точно рабочий код? Откуда $top_lvl взялся? Почему в результате <hr> перед строкой, а в коде после? Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181928 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181929 Переменные отредактировал пере отправкой, забыл $top_lvl заменить на sql_fetch Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181929 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181930 Я в transact-sql не очень разбираюсь, но вопрос, нафига двойное преобразование? Почему не SELECT CAST([Name] AS VARCHAR(18)) AS Name FROM tbl_base WHERE Serial = 5 Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181930 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181932 Там разницы нет, хоть как преобразуй эффект 1 Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181932 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181934 Так попробуй не кастить вообще для начала. В каком типе данные в базе? Тот же варчар небось, нафига эти преобразования? Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181934 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181935 2 минуты назад, Desti сказал: Так попробуй не кастить вообще для начала. В каком типе данные в базе? Тот же варчар небось, нафига эти преобразования? Повторю, разницы нету, меняю не меняю, вывожу на прямую или хоть как, результат один обсалютно Тип данных nvarchar и varchar, так же разницы нет, результат один Вижу ток 1 выход, это получать данные в двоичном коде и преобразовывать их в строку уже, но это очень жестко как по мне, поэтому решил поделиться с вами в надежде услышать годную подсказку Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181935 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181936 Сделай var_dump($sql_fetch->fetchAll()); die; вместо цикла, посмотри на сырые данные. 4 минуты назад, SoulRainr сказал: услышать годную подсказку сначала код в порядок приведи, потом ошибки ищи. Edited 29 мая, 20222 yr by Desti Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181936 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181939 3 минуты назад, Desti сказал: Сделай var_dump($sql_fetch->fetchAll()); die; вместо цикла, посмотри на сырые данные. сначала код в порядок приведи, потом ошибки ищи. Ласт раз повторяю, какой бы код не был, выводит одно и тоже Выше код приведен как пример, т.е просто суть передать Дамп ничего не дает, как и xdebug Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181939 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181941 3 минуты назад, SoulRainr сказал: Дамп ничего не дает Если в базу заглянуть, то там по русски, а в объекте pdo уже транслитерация? И это с учетом того, что mssql никакой транслитерации нет в принципе (из коробки)? Чудес не бывает. Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181941 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181942 Как я понял еще как бывают PDO ODBC не даёт выводить nvarchar по их мануалам официальным, но при этом я вывожу В базе все хорошо, при хдебаге видно что текст передается нормально, но почему то в браузере он уже сам по себе скачет (хдебаг этого не видит) Было склонение из за того что много подключений по PDO ODBC идёт, т.е много файлов залиты и все открыты, но это отбросилось так как PDO не нуждается в закрытии и обрабатывается корректно Поэтому мыслей и идей нет вообще Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181942 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181943 Транслитерация это обычно удел браузеров. Рекомендую попробовать мозиллу без расширений. Она наверно единственная не обладает подобными свистоперделками из коробки. Все остальные браузеры часто делают перевод текста не запрашивая разрешения пользователя, и если текста нет в словаре они вполне могут выдать транслитерацию. Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181943 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181944 2 минуты назад, SoulRainr сказал: но почему то в браузере он уже сам по себе скачет (хдебаг этого не видит) Давайте мух от котлет отделим? Тупо в консоли ($ php test.php) что выдает этот код? Всегда правильно или меняется? Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181944 Share on other sites Больше вариантов
29 мая, 20222 yr Author comment_181947 30 минут назад, Desti сказал: Давайте мух от котлет отделим? Тупо в консоли ($ php test.php) что выдает этот код? Всегда правильно или меняется? Не совсем понял, в консоль браузера вывести переменнуЮ? Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181947 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181948 php код может исполняться двумя способами: через браузер и через командную строку. Через браузер у вас проблемы, надо проверить через запуск интерпретатора php. Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181948 Share on other sites Больше вариантов
29 мая, 20222 yr comment_181951 SoulRainr если у тебя MS система. Надо в cmd или в powershell выполнить команду. с:\php\php.exe c:\***test.php Поставь там свои пути в которые установлен php В консоли линукса команда приведена выше Link to comment https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181951 Share on other sites Больше вариантов
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.