Jump to content

Featured Replies

Столкнулся с неистово неизвестной проблемой
Вывожу из базы данных mssql значения через PHP(IPS) и получаю нужное мне значение.

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

Это до обновления страницы:
image.png.07d3489c404f1abb3f753c8c9a1e6168.png

Это после обновления страниче через пару минут:
image.png.063d80e278fb18f2f2e77f11320b0260.png

 

Если я обновлю страницу через опять же пару минут, получу обратный результат. Т.е получается оно меняется будто по таймеру определенному, хотя код до боли простой...
Данная проблема только с Русскими символами происходит

Код

<?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

А этот код где выполняется? В блоке каком-то или просто новый файл .php где-то отдельно? 

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181921
Share on other sites

Где бы не выполнял, результат один)

Выполнял в своём приложение через class do
И отдельным файлом чистым

Так же и на локалке(Компе)

Ост выполняется на VPS сервере

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181923
Share on other sites

Касаемо обновления результата через какое-то время, кмк, это вероятно какие-то кешированные значения. Либо блока IPS, либо кеша PHP, opcache например. Т.е. если код будет отредактирован сейчас, то его изменения произойдут через какое-то время (зависит от настроек). 

Можно попробовать добавить вывод значения не на экран, а в логи (файл, или еще куда-то), чтобы отсечь возможные варианты с какими-то внешними прослойками. Или отдебажить локально, посмотреть на значения переменных. 

Непохоже на проблемы с кодировкой, т.к. текст получился транслитирированным, если бы у него слетела кодировка, там были бы кракозябрики или вопросики

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181926
Share on other sites
$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

Переменные отредактировал пере отправкой, забыл $top_lvl заменить на 

sql_fetch 
Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181929
Share on other sites

Я в 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

Там разницы нет, хоть как преобразуй эффект 1

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181932
Share on other sites

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

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181934
Share on other sites
2 минуты назад, Desti сказал:

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

Повторю, разницы нету, меняю не меняю, вывожу на прямую или хоть как, результат один обсалютно
Тип данных nvarchar и varchar, так же разницы нет, результат один

Вижу ток 1 выход, это получать данные в двоичном коде и преобразовывать их в строку уже, но это очень жестко как по мне, поэтому решил поделиться с вами в надежде услышать годную подсказку 

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181935
Share on other sites

Сделай

var_dump($sql_fetch->fetchAll()); die;

вместо цикла, посмотри на сырые данные. 

4 минуты назад, SoulRainr сказал:

услышать годную подсказку

сначала код в порядок приведи, потом ошибки ищи.

Edited by Desti

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181936
Share on other sites
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
3 минуты назад, SoulRainr сказал:

Дамп ничего не дает

Если в базу заглянуть, то там по русски, а в объекте pdo уже транслитерация? И это с учетом того, что mssql никакой транслитерации нет в принципе (из коробки)? 

Чудес не бывает.

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181941
Share on other sites

Как я понял еще как бывают

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

Транслитерация это обычно удел браузеров.

Рекомендую попробовать мозиллу без расширений. Она наверно единственная не обладает подобными свистоперделками из коробки. Все остальные браузеры часто делают перевод текста не запрашивая разрешения пользователя, и если текста нет в словаре они вполне могут выдать транслитерацию.

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181943
Share on other sites
2 минуты назад, SoulRainr сказал:

но почему то в браузере он уже сам по себе скачет (хдебаг этого не видит)

Давайте мух от котлет отделим? Тупо в консоли ($ php test.php) что выдает этот код? Всегда правильно или меняется?

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181944
Share on other sites
30 минут назад, Desti сказал:

Давайте мух от котлет отделим? Тупо в консоли ($ php test.php) что выдает этот код? Всегда правильно или меняется?

Не совсем понял, в консоль браузера вывести переменнуЮ?

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181947
Share on other sites

php код может исполняться двумя способами: через браузер и через командную строку. Через браузер у вас проблемы, надо проверить через запуск интерпретатора php. 

Link to comment
https://ipbmafia.ru/topic/24499-chudesa-pdo-odbc/?&do=findComment&comment=181948
Share on other sites

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.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.