PHP7使用pdo连接sqlserver报错

钛元素 2016-10-08 05:02:21
环境:win10 x64 8G内存
应用程序服务器:upupw a版本
apache

运行phpinfo正常

安装了Microsoft SQL Server Native Client
也下载装入了php7适应的php_sqlsrv_7_ts_x64.dll

正常

但是,访问报错:Fatal error: Invalid handle returned.

代码如下:


$user = 'sa';
$password = 'sa';

$dbh = new PDO("sqlsrv:Server=192.168.1.15,1433;Database=dbname", $user , $password); //这行报错了

$stmt = $dbh->prepare("select * from users");
$stmt->execute();

while ($row = $stmt->fetch()) {
print_r($row);
}

unset($dbh);
unset($stmt);




请问是怎么回事?怎么解决啊?

...全文
3825 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jbzj 2017-11-07
  • 打赏
  • 举报
回复
7.1还是7.0? 7.0是可以解决的。 https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver 下载odbc可以解决的。 7.1,貌似需要4.3的那个驱动。
LMH篱 2016-11-27
  • 打赏
  • 举报
回复
我也遇到这个问题了 在微软的官网翻了好久找到了原因: Microsoft Drivers for PHP for SQL Server Version 4.0 requires Microsoft ODBC Driver 11 or Microsoft ODBC Driver 13. 他不再是使用Microsoft SQL Server Native Client 而是改用 Microsoft ODBC Driver了
q1039565 2016-10-21
  • 打赏
  • 举报
回复
pdo前几天正常,这几天突然不正常,sqlsrv连接是可以的。

<?php
  $servern="127.0.0.1";
  $coninfo=array("Database"=>"heroes","UID"=>"sa","PWD"=>"123456");
  $conn=sqlsrv_connect($servern,$coninfo) or die (print_r(sqlsrv_errors(),true));
  $stmt =sqlsrv_query($conn,"SELECT * FROM [User]");
  while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      print_r($row);
}
?>
钛元素 2016-10-11
  • 打赏
  • 举报
回复
算了,php7在windows10下表现...也许是我没试出来。结贴,没用。
xuzuning 2016-10-11
  • 打赏
  • 举报
回复
也就是所,原来只是连接有误,现在是不让连了 越改越糟了
钛元素 2016-10-11
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
错误信息究竟是 Fatal error: Invalid handle returned. 还是 Failed to get DB handle: could not find drivern 呢? 请你先搞搞清楚!
之前是上面的错误,现在是:Failed to get DB handle: could not find drivern
傲雪星枫 2016-10-09
  • 打赏
  • 举报
回复

try {
  $hostname='192.168.1.15';
  $port=1433;//端口
  $dbname="dbname";//库名
  $username="sa";//用户
  $pw="sa";//密码
  $dbh= new PDO("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
  echo"Failed to get DB handle: ".$e->getMessage() ."n";
  exit;
}
echo'connent MSSQL succeed';

$stmt = $dbh->prepare("select * from users");
$stmt->execute();
 
while ($row = $stmt->fetch()) {
  print_r($row);
}

unset($dbh);
unset($stmt);
参考:http://www.php.net/manual/en/ref.pdo-dblib.php
钛元素 2016-10-09
  • 打赏
  • 举报
回复
引用 5 楼 fdipzone 的回复:
PHP一般用mysql,而且一般不用windows 所以组合一般使用lamp或lnmp linux + apache + mysql + php linux + nginx + mysql + php
我只是想获取数据,然后分析展现 数据库就是sql2005,难道要我用c#做一个存到mysql?我感觉是脱裤子放屁呀
xuzuning 2016-10-09
  • 打赏
  • 举报
回复
错误信息究竟是 Fatal error: Invalid handle returned. 还是 Failed to get DB handle: could not find drivern 呢? 请你先搞搞清楚!
傲雪星枫 2016-10-09
  • 打赏
  • 举报
回复
PHP一般用mysql,而且一般不用windows 所以组合一般使用lamp或lnmp linux + apache + mysql + php linux + nginx + mysql + php
钛元素 2016-10-09
  • 打赏
  • 举报
回复
引用 3 楼 fdipzone 的回复:
看看这个:http://jingyan.baidu.com/article/c1a3101e5474b9de646deb7f.html
试过了,没用的。好郁闷。PHP不适合在生产环境连接mssql吗?
钛元素 2016-10-09
  • 打赏
  • 举报
回复
引用 1 楼 fdipzone 的回复:

try {
  $hostname='192.168.1.15';
  $port=1433;//端口
  $dbname="dbname";//库名
  $username="sa";//用户
  $pw="sa";//密码
  $dbh= new PDO("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
  echo"Failed to get DB handle: ".$e->getMessage() ."n";
  exit;
}
echo'connent MSSQL succeed';

$stmt = $dbh->prepare("select * from users");
$stmt->execute();
 
while ($row = $stmt->fetch()) {
  print_r($row);
}

unset($dbh);
unset($stmt);
参考:http://www.php.net/manual/en/ref.pdo-dblib.php
是的,其实应该一样,但是,已经认为是驱动问题了。 提示这个:Failed to get DB handle: could not find drivern 应该是win10下要安装个mssqlserver的驱动吧,但是是哪个啊?我安装了安装了Microsoft SQL Server Native Client

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧