PDO-эквивалент mysql_num_rows или mssql_num_rows

Я знаю, что этот вопрос задавался ранее, но кажется, что решения были специфическими для представленной проблемы.

У меня есть кодовая база с сотнями случаев, когда используется 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. Если это невозможно, что позволило сделать это возможным раньше?

2

Решение

Если вы хотите посчитать строки, вы можете сделать это с помощью PDO:

$sql = 'select * from users';
$data = $conn->query($sql);
$rows = $data->fetchAll();
$num_rows = count($rows);

Нет возможности напрямую считать строки при использовании SELECT Заявление с PDO.

5

Другие решения

Так что с каждой помощью это то, что я построил.

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) {

тогда это решение все равно создаст работу, обновляющую все экземпляры для использования этой пользовательской функции.

-2

По вопросам рекламы [email protected]