PDO rowCount продолжает возвращать -1 с PDO :: ATTR_CURSOR = & gt; PDO :: CURSOR_SCROLL

Я озадачен этой проблемой в течение нескольких часов. У меня есть PHP-код, использующий PDO для доступа к базе данных Sybase. Проблема заключается в функции rowCount() продолжает возвращать значение -1 всегда. Я нашел решение здесь PDO :: rowCount (), возвращающий -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) );

Спасибо.

1

Решение

Я публикую свое собственное решение, чтобы оно помогло кому-то, у кого может быть такая же проблема. Поэтому я следовал решению других людей, чтобы сначала вычислить возвращаемые строки, а затем, если число строк больше нуля, мы приступаем к выполнению. Мой код, как показано ниже:

$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;
}
}

Надеюсь, что это может помочь кому-то там. Наслаждаться 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]