Pdo Sqlite и php

0

У меня есть вопрос, связанный с php/pdo и sqlite. Я портировал код из базы данных mysql в базу данных sqlite. Я использовал rowCount() alot в этом проекте.

В моем оригинальном приложении Mysql я сделал это:

$stmt = $db->query("SELECT id FROM table where id = $id "); 
$rc = $stmt->rowCount();
if ($rc == 1) {
// do something 
    }

В документации говорится, что этот метод предназначен только для возврата затронутых строк из запросов UPDATE, INSERT, DELETE, с драйвером PDO_MYSQL (и только этим драйвером) вы можете получить количество строк для запросов SELECT.

Итак, как добиться того же результата с помощью sqlite-бэкэнд?

Вот как я это сделал:

$stmt = $db->query("SELECT count(id) as cnt FROM table where id = $id "); 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if ($row['cnt'] == "1") {
        // do something
    } else {
        return false;
        }
    }
}

Я ищу более элегантное решение, достигая того же, что и rowCount().

  • 0
    Поскольку вы все еще используете PDO, вы все равно можете использовать rowCount() .
  • 0
    возможный дубликат количества строк с PDO
Теги:
sqlite3
pdo

1 ответ

1
Лучший ответ

Это способ сделать это в pdo:

$stmt = $db->query('SELECT * FROM table');
if ($stmt->rowCount() == 1) {
    //...
} else {
    //...
}
echo $row_count.' rows selected';

(Точно так же XD)

Кстати, я бы не рекомендовал делать что-то вроде

$stmt = $db->query("SELECT count(id) as cnt FROM table where id = $id "); 

Нехорошо иметь переменные в таких утверждениях. используйте что-то вроде:

$stmt = $db->query('SELECT id FROM table where id = ?');
$stmt->execute(array($id));
if ($stmt->rowCount() == 1)
{
    $arr = $stmt->fetch(PDO::FETCH_ASSOC);
    foreach($arr as $element)
    {
        echo '<pre>'.print_r($element).'</pre>';
    }
}
else
{
    //...
}

Это часть некоторого кода, который я использую:

$stmt = $db->prepare('SELECT * FROM users WHERE id=?');
$stmt->execute(array($id));
if ($stmt->rowCount() == 1) {
    $currentUser = $stmt->fetchAll(PDO::FETCH_ASSOC)[0];
} else {
    return false;
}

Изменение: (для проблем совместимости)

$stmt = $db->query('SELECT * FROM table');
$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (($arr === false) || (sizeof($arr) == 0)) {
    return false;
} else {
    //... do ....
    echo sizeof($arr);
}
  • 0
    Как я уже сказал в своем вопросе, согласно документации и моему опыту, rowCount () работает только с операторами select, если вы используете Mysql в качестве бэкэнда, а не с sqlite. @DevPGSV
  • 0
    Упс XD я отредактировал ответ. Это должно работать сейчас. :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню