gpt4 book ai didi

php - 尝试连接/查询 Microsoft Azure SQL 数据库时,DBLIB PDO 驱动程序一直失败

转载 作者:行者123 更新时间:2023-12-04 19:20:47 26 4
gpt4 key购买 nike

所以我正在使用 Linux (ubuntu) 并且我正在尝试连接到 Microsoft Azure SQL 数据库。

服务器信息:

  • 服务器地址是 a1a1a1a1a1.database.windows.net(a1a1a1a1a1 是我的服务器名称的占位符)
  • 数据库名称为 MyDatabase
  • 该表名为 [dbo]。[Sloth]

  • Freetds.conf 设置:
    [global]
    dump file = /tmp/freetds.log
    debug flags = 0xffff
    text size = 64512

    [a1a1a1a1a1.database.windows.net]
    host = a1a1a1a1a1.database.windows.net
    port = 1433
    tds version = 8.0
    client charset = UTF-8

    当我跑
    php -r "phpinfo();" | grep "PDO drivers"

    在终端它返回
    PDO drivers => dblib, mysql

    因此,据我所知,所有配置和驱动程序安装都是应有的。

    所以现在对于错误:

    错误 1 ​​

    如果我像这样初始化 PDO:
    $conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);

    它连接,但如果我删除 dbname 的“=”字符周围的空格,如下所示:
    $conn = new \PDO ( "dblib:dbname=MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);

    它从 PDOException 和 freetds.log 返回这些错误
    SQLSTATE[HY000] General SQL Server error: Check messages from the SQL Server (severity 16)

    (dbutil.c:86):msgno 40508: "USE statement is not supported to switch between databases. Use a new connection to connect to a different Database."

    错误 2

    当我运行以下代码时
    try {
    $conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);
    $conn->setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
    $statement = $conn->prepare("SELECT * FROM dbo.Sloth");
    $result = $statement->execute();
    }
    catch ( PDOException $e ) {
    print( "Error connecting to SQL Server." );
    die(print_r($e));
    }

    它在 $result = ... 行中断,这些错误来自 PDOException 和 freetds.log
    SQLSTATE[HY000]: General error: 208 General SQL Server error: Check messages from the SQL Server [208] (severity 16) [(null)] 

    (dbutil.c:86):msgno 208: "Invalid object name 'dbo.Sloth'."

    但是当我运行查询时
    SELECT * FROM dbo.Sloth

    在 Azure 数据库管理门户中,它返回所有正确的行。

    任何有关这些问题的帮助将不胜感激!

    编辑

    通过一些测试,我发现这两个问题都源于 PDO 没有连接到数据库而是连接到“master”这一事实。这将解释错误 2 的无效对象名称错误。

    关于为什么 ERROR 1 中的代码没有连接到 MyDatabase 的任何想法?

    最佳答案

    解决方案

    我使用的是 PHP 5.3.10,它仍然存在以下错误,https://bugs.php.net/bug.php?id=64338

    原来 PDO 驱动程序正在执行 Microsoft Azure SQL 数据库不喜欢的 USE 语句。

    我升级到 PHP 5.4.21,一切正常。

    关于php - 尝试连接/查询 Microsoft Azure SQL 数据库时,DBLIB PDO 驱动程序一直失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20057294/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com