循环SQLite3查询时出现PHP错误

时间:2014-01-19 06:44:52

标签: php sqlite

我正在使用这个常量循环独立脚本从SQLite3 db获取数据。 一段时间脚本退出时发生致命错误:

PHP Warning:  SQLite3::query(): Unable to prepare statement: 14, unable to open database file in /home/alex/looper.php on line 17
PHP Fatal error:  Call to a member function fetchArray() on a non-object in /home/alex/looper.php on line 19

该数据库中没有太多数据,总共可能有10-50行。 不知道从哪里开始寻找。请帮忙。

代码:

function listen() {
    $db = new SQLite3("/home/alex/some.db");
    $result = $db->query("SELECT * FROM names where status=0");

    while($row = $result->fetchArray()) {

        // .... do some stuff and delete record

        $db->query("DELETE FROM names WHERE id='$row[id]'");
    }

    sleep(3);
    listen();
}

set_time_limit(0);
listen();

2 个答案:

答案 0 :(得分:1)

非常自我解释。数据库文件无法打开。要么它不存在(尝试完整路径,记住区分大小写)或服务器没有足够的权限打开它(网络服务器通常在其自己的用户帐户下运行,这很可能与文件的所有者不同)

答案 1 :(得分:0)

另一个问题是,在打开数据库之后,在完成另一个查询之前,需要先完成一些事情然后关闭数据库,因为你无法打开已打开的数据库......它是开放的!

你的例子,对于我的生活,我无法想象在一个函数反复调用自身的情况下会出现什么类型的真实世界场景......它会引起你网站主机服务器上邻居的担忧。您的网站将与其他人分享托管空间......

如果您使用的是 set_time_limit(0); ,那么您的脚本将占用所有CPU时间,而其他网站将受此影响,除非您是托管服务器的唯一所有者,不应该设置时间限制,这意味着脚本没有限制。

建议阅读:http://php.net/manual/en/function.set-time-limit.php