2015-01-07 4 views
1

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

Чтение документов php, rowCount, используемых для удаления, вставки, обновления, если вам нужно количество возвращаемых строк, почему вы не используете функцию count()? – Axel

+0

@Axel благодарим вас за ответ. Я использую функцию для всех запросов SELECT, INSERT, UPDATE, DELETE. Поэтому я стараюсь придерживаться этой функции для всех типов операторов. Как использовать функцию count(). Вы имеете в виду подсчет самого результата? – UserProg

ответ

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

Надеюсь, это может помочь кому-то там. Enjoy :)