【问题标题】:PHP7 Yii2 MSSQL NonEnglish Quote ErrorPHP7 Yii2 MSSQL 非英文引用错误
【发布时间】:2016-08-20 08:45:40
【问题描述】:

这是我在 StackOverFlow 中的第一个问题

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) {

后:

if (false) {

最后调试/日志选项卡显示如下:

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

但是,仍然没有出现数据。

【问题讨论】:

  • 阅读您的问题后,很难确定您的问题。请具体说明您的问题是什么?你想做什么?
  • 我想使用 php7 但我没有,因为非英文引用错误

标签: php sql-server yii2


【解决方案1】:

Freetds 从 7.0 版开始管理字符集。编辑 /etc/freetds/freetds.conf 或将版本参数添加到 db settings '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'
],

【讨论】:

  • 当前 freetds.conf 与上面相同(7.0 -> 8.0)但不起作用
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2018-07-12
相关资源
最近更新 更多