日期:2014-05-16  浏览次数:20521 次

为毛PDO查询过程会导致服务器断开?
今天帮人改个程序,测试一切正常后,发过去,在服务器上出现问题,访问某个页面的时候就会出现页面打不开的提示,让检查网络,貌似是服务器断开了连接。

      $sql = "SELECT client_id, expires, scope FROM tokens WHERE oauth_token = :oauth_token";
      $stmt = $this->db->prepare($sql);
      $stmt->bindParam(":oauth_token", $oauth_token, PDO::PARAM_STR);
      $stmt->execute();

      $result = $stmt->fetch(PDO::FETCH_ASSOC);

跟踪了半天,发现执行到$stmt->execute();的时候就会出现这样的问题
而奇怪的是,同个页面另一个函数却正常:
      $sql = "SELECT code, client_id, redirect_uri, expires, scope FROM auth_codes WHERE code = :code";
      $stmt = $this->db->prepare($sql);
      $stmt->bindParam(":code", $code, PDO::PARAM_STR);
      $stmt->execute();


经过调试,参数里的数据没一点问题,改成Mysql驱动获取数据就一切正常,所以数据是没问题的。会是什么问题呢?有人遇到过这样的问题吗?
------解决方案--------------------
信息太少,不好判断。

打开错误提示没有,有不有错误信息。
------解决方案--------------------
检查数据库连接

参考:http://www.php.net/manual/en/pdo.error-handling.php
------解决方案--------------------
出错原因是,select中没有oauth_token字段。

$sql = "SELECT client_id, expires, scope FROM tokens WHERE oauth_token = :oauth_token";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(":oauth_token", $oauth_token, PDO::PARAM_STR);

$sql = "SELECT code, client_id, redirect_uri, expires, scope FROM auth_codes WHERE code = :code";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(":code", $code, PDO::PARAM_STR);
------解决方案--------------------
你总是得贴出错误信息的!
另外,如果你的 php 版本低于 5.3 的话,建议还是不要用 PDO(总是有些莫名其妙的错误的)
------解决方案--------------------
贴全代码,肯定有错误。
------解决方案--------------------
SELECT client_id, expires, scope FROM tokens WHERE oauth_token = :oauth_token

直接拿sql放到mysql编辑器执行试试。
------解决方案--------------------
引用:
阿里云服务器 支持 PDO 吗?
请找管理员核实一下

这不是查看phpinfo()就可以看得到?
------解决方案--------------------
检查代码里有没有$this->db=NULL;
是不是清空了?
------解决方案--------------------
你有客户端吧,客户端总会给你打印出一些东西的,例如

你访问了你的a.php 这个是操作pdo的,你在服务器上的apache/nginx查看不到所有的log?如果看不到那你就看看客户端上服务器response的http code是什么 message是什么,总有办法的。

PDO 我碰见过如果用长连接 会导致一些网页直接挂掉。
------解决方案--------------------
我今天也遇到了同样的问题。。PDO执行select查询导致apache直接断开,查询了PHP log和apche log都没有错误反馈。。但是执行UPDATE/INSERT没有问题,再测试发现执行select a from table可以,但是select a,b from table就立马挂掉,不知道什么原因。