Я знаю, что этот вопрос задавался ранее, но кажется, что решения были специфическими для представленной проблемы.
У меня есть кодовая база с сотнями случаев, когда используется mssql_num_rows.
Пример кода:
$db->execute($sql);
if ($db->getRowsAffected() > 0) {
$total = $db->fetch();
В ДБ классе:
$this->rowsaffected = mssql_num_rows($this->query_result);
SELECT count(*) FROM table
запросы, так как у меня слишком много конкретных операторов выбора.preg_replace
удалить все между SELECT and FROM
а затем заменить на COUNT(*)
и выполнить второй запрос, но это предполагает, что все запросы настроены определенным образом.fetchAll
будет первый count()
результаты, но это означает обновление всех экземпляров операторов if.Так что лучше всего заменить функцию * _num_rows, если люди обновляют свой код в PDO. Не то, что решает конкретную проблему, а то, что заменяет функциональность * _num_rows. Если это невозможно, что позволило сделать это возможным раньше?
Если вы хотите посчитать строки, вы можете сделать это с помощью PDO:
$sql = 'select * from users';
$data = $conn->query($sql);
$rows = $data->fetchAll();
$num_rows = count($rows);
Нет возможности напрямую считать строки при использовании SELECT
Заявление с PDO.
Так что с каждой помощью это то, что я построил.
function getRowsAffected() {
$rawStatement = explode(" ", $this->query);
$statement = strtoupper($rawStatement[0]);
if ($statement == 'SELECT' || $statement == 'SHOW') {
$countQuery = preg_replace('/(SELECT|SHOW)(.*)FROM/i', "SELECT count(*) FROM", $this->query);
$countsth = $this->pdo->prepare($countQuery);
if ($countsth->execute()) {
$this->rowsaffected = $countsth->fetchColumn();
} else {
$this->rowsaffected = 0;
}
}
return $this->rowsaffected;
}
$ this-> rowsapted уже обновляется на этапе выполнения, если оператор является INSERT, UPDATE или DELETE с помощью $ sth-> rowCount (), поэтому мне нужно было только выполнить этот второй запрос на SELECT и SHOWS.
if ($statement == 'INSERT' || $statement == 'UPDATE' || $statement == 'DELETE') {
$this->rowsaffected = $this->sth->rowCount();
}
Я чувствую себя плохо, потому что, как я уже упоминал в своем вопросе, что я искал общее решение, я, кажется, наткнулся на конкретное решение, которое работает для меня, так как код уже запрашивает количество строк с использованием функции. Если код делал это:
if (mysql_num_rows($result) > 0) {
тогда это решение все равно создаст работу, обновляющую все экземпляры для использования этой пользовательской функции.