首页 文章

Pdo Sqlite和php

提问于
浏览
0

我有一个与php / pdo和sqlite有关的问题 . 我已将一些代码从mysql后端移植到sqlite后端 . 我在这个项目中使用过rowCount() .

在我原来的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()相同的功能 .

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);
    }
    

相关问题