我对这个问题困惑了好几个小时了。我有使用PDO访问Sybase数据库的PHP代码。问题是rowCount()
的功能始终保持-1
的值。我在此处找到了解决方案PDO::rowCount() returning -1,并且用户在准备查询时提供了PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL
的参数。这个解决方案适合他,但出于某些原因不适合我。感谢你们能帮助我。
这是我的代码:
public function query($sql, $params = array()){
$this->_error = false; //always first initialize to false
if( $this->_query = $this->_pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)) ){
$x = 1;
if( count($params) ){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
if( $this->_query->execute() ){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
echo $this->_count = $this->_query->rowCount(); //this line returns -1
} else {
$this->_error = true;
}
}
return $this;
}
我将使用以下内容调用此函数:
$data = $this->_db->query( "SELECT username FROM users WHERE username=?", array($user) );
谢谢。
答案 0 :(得分:0)
我发布了我自己的解决方案,以便帮助那些可能遇到同样问题的人。所以我跟随其他人解决方案首先计算返回的行,然后如果行数大于零,我们继续执行。我的代码如下:
$sql = "SOME SQL STATEMENT HERE";
if( $this->_query = $this->_pdo->prepare( "SELECT COUNT(*) as computedRow FROM ( {$sql} ) AS X", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL) ) ){
$x = 1;
if( count($params) ){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
if( $this->_query->execute() ){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
foreach ($this->_results as $obj){
$this->_count = $obj->computedRow;
}
if($this->_count){
if( $this->_query = $this->_pdo->prepare( $sql . $orderby , array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL) ) ){
$x = 1;
if( count($params) ){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
if( $this->_query->execute() ){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
}
else {
$this->_error = true;
}
}
}
else{
$this->_count = 0;
}
}
else {
$this->_error = true;
}
}
希望这可以帮助那里的人。享受:)