Использование и ошибки PHP MySQL numRows()?

#php #mysql #mysql-num-rows

#php #mysql #mysql-num-rows

Вопрос:

У меня есть следующий код, который я использую для проверки ограничений в базе данных (для класса). Вы пытаетесь получить количество строк, возвращаемых запросом, и я продолжаю получать ту же ошибку в строке

 $count1= $ires1->numRows(MDB2_FETCHMODE_ASSOC);
  

Ошибка:

 > Call to a member function numRows() on a non-object
  

Я рвал на себе волосы, потому что другие мои функции, похожие на эту, работают нормально, это единственная функция, которая не работает. Есть ли что-то, что выделяется в этом?

Аргумент $ db — это просто подключение к моей базе данных, pno это целое число, а essn это текст .. Так что я не уверен, что я делаю неправильно..

 <?php
function submitCheck($db){
    $essn= $_POST['essn'];
    $pno=$_POST['pno'];

    $query1 = "select * from works_on where pno=? and essn=?";
    $types1 = array('integer','text');
    $stmt1 = $db->prepare($query1, $types1, MDB2_PREPARE_MANIP);

    if (MDB2::isError($stmt1)) {
        print("bad prepared statement:" . $stmt->getMessage());
    }

    $queryargs1 = array($pno, $essn);
    $ires1 = $stmt1->execute($queryargs1);
    $count1= $ires1->numRows(MDB2_FETCHMODE_ASSOC);
    //print("The project number entered was $count1[pno]");
    if(!(count($count1)==0)){
        print("The employee is already part of this project! If you want to update the hours, please select update!");
        return false;
    }
    return true;
}
?>
  

Комментарии:

1. Каково значение $ires1 ? Возможно ли, что запрос завершается ошибкой и $stmt1->execute вместо этого возвращает некоторое значение ошибки? (как false , или null )

2. Я думаю, что это возвращает нулевое значение, именно поэтому оно не работало.

Ответ №1:

 $count1 = $stmt1->rowCount();
  

$ires1 является не Object , а boolean , как указано в документации PHP PDOStatement::rowcount.

Предупреждение, однако, от PHP.net сайт:

Если последняя инструкция SQL, выполненная связанным с ней, PDOStatement была SELECT инструкцией, некоторые базы данных могут возвращать количество строк, возвращенных этой инструкцией. Однако такое поведение не гарантируется для всех баз данных и не следует полагаться на переносимые приложения.

Там у вас тоже есть предложенное ими решение:

Для большинства баз данных PDOStatement::rowCount() не возвращает количество строк, на которые влияет SELECT оператор. Вместо этого используйте PDO::query() для выдачи SELECT
COUNT(*)
инструкции с теми же предикатами, что и предполагаемая инструкция SELECT, затем используйте PDOStatement::fetchColumn() для получения количества строк, которые будут возвращены. После этого ваше приложение может выполнить правильное действие.»

Я не знал и не смог найти информацию о методе numRows , так что это все, что я могу сделать. Удачи!

Комментарии:

1. @Paul, если это помогло, то тебе следует хотя бы добавить положительный голос к этому ответу, и если он в конечном итоге ответил на твой вопрос, то пометьэтот ответ как принятый ответ