PHP7 Yii2 MSSQL Ошибка неанглийской цитаты

php sql-server yii2

116 просмотра

1 ответ

Вот первый мой вопрос в StackOverFlow

MyEnvironment Моя среда Centos7 Yii2.0.9 PHP7.0.9 MSsql Использование PDODBLib и FreeTDS Соединение в порядке Таблица Показать в порядке (где предложение ничего не значит) Я думал, что PHP7 все нормально, но если предложение Where не работает

Вкладка «Отладка / Журналы» показана ниже:

SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE 0x25ed8c9c25)

До PHP 5.6 Показать ниже:

SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE '%팜%')

Только это происходит в неанглийском слове

Я нахожу это Yii2 / DB / Schema.php

public function quoteValue($str)
{
    if (!is_string($str)) {
        return $str;
    }

    if (($value = $this->db->getSlavePdo()->quote($str)) !== false) {
        return $value;
    } else {
        // the driver doesn't support quote (e.g. oci)
        return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
    }
}

Топ изменения кода, как показано ниже

if (($value = $this->db->getSlavePdo()->quote($str)) !== false) {

Afer:

if (false) {

Окончательная отладка / вкладка журналов, показанная ниже:

SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE '%팜%')

Но, все же Данные не появляются.

Автор: micaz Источник Размещён: 08.11.2019 11:05

Ответы (1)


0 плюса

Freetds управляет кодировкой от версии 7.0. Отредактируйте /etc/freetds/freetds.conf или добавьте параметр версии в настройки db 'dsn'.

Атрибут Charset не работает для MS SQL, вы должны добавить его в 'dsn'.

'db' => [
     'class' => 'yii\db\Connection',
     'dsn' => 'dblib:version=7.0;host=192.168.1.2;dbname=devdb;charset=UTF-8',
     'username' => 'devuser',
     'password' => 'devpasswd',
     //'charset' => 'UTF-8'
],
Автор: AzerusBS Размещён: 30.08.2016 03:14
Вопросы из категории :
32x32