【问题标题】:yii2 use dblib driver SQLSTATE[HY000]: General error: 20018 Invalid object name t_useryii2 使用 dblib 驱动 SQLSTATE[HY000]: General error: 20018 Invalid object name t_user
【发布时间】:2021-07-15 10:48:03
【问题描述】:

我在我的项目中使用了 dblib 驱动程序, 但执行查询异常

Database Exception – yii\db\Exception
SQLSTATE[HY000]: General error: 20018 Invalid object name 't_user'. [20018] (severity 16) [select top 10 * from t_user]
The SQL being executed was: select top 10 * from t_user
Error Info: Array
(
    [0] => HY000
    [1] => 20018
    [2] => Invalid object name 't_user'. [20018] (severity 16) [select top 10 * from t_user]
    [3] => -1
    [4] => 16
)
↵
Caused by: PDOException
SQLSTATE[HY000]: General error: 20018 Invalid object name 't_user'. [20018] (severity 16) [select top 10 * from t_user]

如果我使用原生 PHP 就可以了

<?php

 $dbh = new PDO("dblib:host=;dbname=","","");

$query = $dbh->prepare("SELECT top 1 * from t_user");
$query->execute();
while($row = $query->fetch()){
        print_r($row);
}

我安装 freetds php_dblib

配置信息

➜  www /usr/local/Cellar/freetds/1.1.40/bin/tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v1.1.40
             freetds.conf directory: /usr/local/etc
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.3
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes
                            OpenSSL: yes
                             GnuTLS: no
                               MARS: yes
➜  www php -v
PHP 7.3.18 (cli) (built: May 29 2020 02:17:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.18, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans
    with Zend OPcache v7.3.18, Copyright (c) 1999-2018, by Zend Technologies
➜  www php -m | grep dblib
pdo_dblib
➜  www php --ri pdo_dblib

pdo_dblib

PDO Driver for FreeTDS/Sybase DB-lib => enabled
Flavour => freetds

yii2 配置 [使用 yii2 basic 2.0.x]

 <?php

return [
    'class' => 'yii\db\Connection', // yii connection
    'dsn' => 'dblib:host=;database=', // this is dblib
    'username' => '', // user name 
    'password' => '', // password
    'charset' => 'utf8',
];

我不知道如何解决这个问题。 大牛求帮忙~

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • 您能否尝试使用从 dbo.user 中选择前 10 * 名而不是从用户中选择前 10 * 名
  • 另外,USER 是 T-SQL 中的 reserved keyword

标签: php sql-server yii2


【解决方案1】:

如前所述,“用户”是一个保留字。使用保留字作为标识符是个坏主意 - 您确实需要养成良好的习惯,而不是更多的坏习惯。

您应该更改您的表格的名称,以便它不需要被分隔。通过阅读regular identifiers 的文档来学习。但您可以使用以下内容:

select <columns of interest> from dbo.[user] order by <whatever>:

注意良好的习惯 - 模式限定对象名称,指定您需要的列,如果需要,应用 ORDER BY 子句。

【讨论】:

  • 与dbo无关。我只是一个例子。现在任何查询都会提示错误
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2021-01-09
  • 1970-01-01
  • 2021-07-06
  • 2021-10-15
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
相关资源
最近更新 更多