为毛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就立马挂掉,不知道什么原因。