2016-08-20 72 views
0

這裏首先我的問題在計算器PHP7 Yii2 MSSQL NonEnglish報價錯誤

MyEnvironment 我的環境 Centos7 Yii2.0.9 PHP7.0.9 MSSQL使用PDODBLib而且freetds的 連接正常表顯示正常(WHERE子句沒有) 我想了想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) { 

Finaly調試/日誌選項卡顯示下圖:

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

但是,仍然是數據不會出現。

+0

在閱讀您的問題後,很難確定您的問題..請具體說明您的問題?和你想要執行什麼? –

+0

我想使用php7但我不會因爲非英文引用錯誤 – micaz

回答

0

Freetds從verison 7.0管理charset。編輯/etc/freetds/freetds.conf或將版本參數添加到數據庫設置'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' 
], 
+0

當前freetds.conf與上面(7.0 - > 8.0)相同但不起作用 – micaz