4

我正在尝试使用 PHP 的 PDO 连接到 Microsoft SQL Server / Microsoft Azure 数据库:

<?php

// no actual login data, but similar string lengths
$dbHost = 'aa1234bbb5.database.windows.net';
$dbUser = 'db_a1a1a1a1_b2b2_c3c3_d4d4_e5e5e5e5e5e5_ExternalWriter';
$dbPass = 'pPAs0wOoO1&r#dd';
$dbName = 'db_a1a1a1a1_b2b2_c3c3_d4d4_e5e5e5e5e5e5';

try {
    $pdo = new PDO("dblib:host=$dbHost:1433;dbname=$dbName", $dbUser, $dbPass); 
} catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
}

PDO 初始化会引发带有以下消息的 PDOException:

SQLSTATE[HY000] Name too long for LOGINREC field (severity 2)

我在 Debian 7.7 x64 上运行 PHP 5.4.41-0+deb7u1。

我的问题归结为:

  1. 为什么我会收到此错误消息?
  2. 我应该如何实际连接到数据库?

注意:我无法更改登录数据,因为我需要访问 Microsoft Access Web App 的后端数据库。如果您创建这样的 Web 应用程序,Microsoft 会在其“公开可用”的 Azure 服务器之一上创建数据库。您可以要求服务器为您提供用户名和密码 - 但不幸的是,您必须使用提供给您的任何内容。

4

2 回答 2

2

“LOGINREC”结构最多可以有 30 个字符。你必须缩短长字符串。

于 2015-06-23T14:05:28.020 回答
-1

您是否尝试过 SqlSrv - Microsoft 的 MS SQL 替代驱动程序。据我了解,PDO_DBLIB - 扩展名:http ://php.net/manual/en/ref.pdo-dblib.php在 PHP 5.3 或更高版本的 Windows 上不再可用。建议使用 SqlSrv,我已经测试了你的长 dbUser 和 dbPass,它通过使用 SqlSrv 在我这边运行良好: 在此处输入图像描述

如果我对您的问题有任何误解,请随时告诉我。

编辑:

我也尝试过 odbc_connect 并且效果很好 在此处输入图像描述

有关适用于 Linux 的 Microsoft SQL Server ODBC 驱动程序的更多信息,您可以参考http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/ & http://www.easysoft.com/developer/languages/php/sql_server_unix_tutorial.html#driver在 64 位 Debian 或 Ubuntu 上安装它并不难。

于 2015-06-23T18:45:18.420 回答