PHP MySQL numRows () использование и ошибки? - PullRequest
0 голосов
/ 29 апреля 2011

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

$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 Ответ

2 голосов
/ 29 апреля 2011
$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, так что это все, что я могу сделать. Удачи!

...