#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
инструкции с теми же предикатами, что и предполагаемая инструкция SELECT, затем используйте
COUNT(*)PDOStatement::fetchColumn()
для получения количества строк, которые будут возвращены. После этого ваше приложение может выполнить правильное действие.»
Я не знал и не смог найти информацию о методе numRows
, так что это все, что я могу сделать. Удачи!
Комментарии:
1. @Paul, если это помогло, то тебе следует хотя бы добавить положительный голос к этому ответу, и если он в конечном итоге ответил на твой вопрос, то пометьэтот ответ как принятый ответ