如何使用PHP的dblib PDO驱动程序与长用户名? / SQLSTATE [HY000] LOGINREC字段的名称太长(严重性为2)

时间:2015-06-23 13:56:48

标签: php sql-server pdo azure-sql-database ms-access-web-app

我正在尝试使用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. 我应该如何实际连接到数据库?
  3. 注意:我无法更改登录数据,因为我需要访问Microsoft Access Web App的后端数据库。如果您创建此类Web应用程序,Microsoft将在其“公共可用”Azure服务器之一上创建数据库。您可以要求服务器为您提供用户名和密码 - 但遗憾的是您必须使用给您的任何内容。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

您是否尝试过SqlSrv - Microsoft的MS SQL的替代驱动程序。根据我的理解,PDO_DBLIB - 扩展名:http://php.net/manual/en/ref.pdo-dblib.php在使用PHP 5.3或更高版本的Windows上不再可用。建议使用SqlSrv,我测试了你的长dbUser&amp; dbPass,它通过使用SqlSrv在我身边工作正常: enter image description here

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

修改

我也尝试过odbc_connect,但它运行正常 enter image description here

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