【问题标题】:PHP unable to connect to SQL Server using PDO- exceptionPHP 无法使用 PDO 连接到 SQL Server - 异常
【发布时间】:2026-01-06 21:45:02
【问题描述】:

我正在尝试使用以下方法将 php 连接到 SQL 服务器驱动程序:

它适用于 MYSQL。但不适用于 SQL Server。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$data = json_decode(file_get_contents('php://input'), true);

if(!empty($data)):
header('Content-Type:text/plain');
$hostname = '10.8.8.9';                 
$username = 'siddharth';
$password = '1234';
$dbname = 'AirportFootfall';
$mssqldriver = '{SQL Server}';
//$dbh = new PDO("mssql:host=$hostname;dbname=AirportFootfall", $username, $password);
//$dbh =  new PDO("sqlsrv:Server=10.16.34.90;Database=AirportFootfall", $username, $password);
//$dbh =    new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=AirportFootfall", $username, $password);
//$dbh = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=AirportFootfall", $username, $password);
//$dbh = new PDO("dblib:host=$hostname;dbname=AirportFootfall", $username, $password);
//$dbh = new PDO("dblib:host=$hostname;dbname=$dbname", $username, $password);
$dbh = new PDO("dblib:host=$hostname;dbname=$dbname", $username, $password);
$arraykey=array_keys($data); 
$array=$data[$arraykey[0]]; 

try 
{

    $count = $dbh->exec('INSERT INTO RadioCon_Sensor_Raw_Data(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES ("' . implode('", "', $array) . '")' ) or die(print_r($dbh->errorInfo(), true)); 
 //echo $count;
$dbh = null;
echo 'Data Successfully inserted!!<br />';
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

endif;
?>

更新:已安装 pdo_dblib 扩展。

我来了

致命错误:在 /var/www/html/RADIOLOCOUS/GMR/gmrsample_copy.php:14 中未捕获的异常“PDOException”和消息“找不到驱动程序”堆栈跟踪:#0 PDO->__construct('odbc:Driver ={SQ...', 'siddharth', '1234') #1 {main} 在 ....line 14 中抛出

除了 pdo 之外的任何其他连接方式

我正在使用 Ubuntu 14.04 LAMP 和 php 5.5

我的 php_info 说:

PDO 驱动程序 dblib、mysql

【问题讨论】:

标签: php mysql sql-server


【解决方案1】:

PDO_DBLIB 的文档显示了以下 DSN:

mssql:host=localhost;dbname=testdb
dblib:host=localhost;dbname=testdb

所以我想建议:

$dbh = new PDO("dblib:host=$hostname:1433;dbname=AirportFootfall", $username, $password);

您可以通过这种方式测试您的连接:

<?php
header('Content-Type:text/plain');
$hostname = '10.8.8.9';                 
$username = 'siddharth';
$password = '1234';
$dbname = 'AirportFootfall';
try {
    $dbh = new PDO("dblib:host=$hostname:1433;dbname=$dbname", $username, $password);

    $sql = "SELECT 'It is working' AS name";
    foreach ($dbh->query($sql) as $row) {
        print $row['name'] . "\n";
    }
} catch (PDOException $ex) {
    print $ex->getMessage();
}    
?>

【讨论】:

【解决方案2】:

看起来 $mssqldriver 变量已被注释...您是否尝试取消注释?如果您仔细查看 Connection 语句,请使用该 var:

$dbh =  new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=AirportFootfall", $username, $password);

【讨论】:

  • 另外,请确保您已安装“php5-sybase”
  • 已经更新了我的答案@uTombou,在这上面花了很多时间,真的需要解决这个问题......
  • 此修复的任何其他替代方案,已用代码更新了我的问题
最近更新 更多