当前位置:  开发笔记 > 编程语言 > 正文

SQLite/PHP只读?

如何解决《SQLite/PHP只读?》经验,为你挑选了1个好方法。

我一直在尝试将SQLite与PHP中的PDO包装器一起使用并取得了成功.我可以很好地从数据库中读取,但是当我在浏览器中查看页面时,我的更新都没有提交到数据库.奇怪的是,从我的shell运行脚本确实更新了数据库.我怀疑文件权限是罪魁祸首,但即使数据库提供完全访问权限(chmod 777),问题仍然存在.我应该尝试更改文件所有者吗?如果是这样,该怎么办?

顺便说一句,我的机器是PHP激活的标准Mac OS X Leopard安装.

@Tom Martin

谢谢您的回复.我只是运行你的代码,它看起来像PHP运行用户_www.然后我尝试将数据库chown为_www所拥有,但这也不起作用.

我还应该注意,PDO的errorInfo函数并不表示发生了错误.这可能是PDO以某种方式打开数据库以进行只读的设置吗?我听说SQLite对整个文件执行写锁定.是否有可能数据库被阻止写入的其他东西锁定?

我决定将代码包括在内.这将或多或少成为Grant的 PHP 脚本的一个端口.到目前为止,它只是问题部分:

.*?([,\d]+)<\/div>.*?Reputation/s', $page, $rep);
$rep = preg_replace("/,/", "", $rep[1]);

preg_match('/iv class="summarycount".{10,60} (\d+)<\/d.{10,140}Badges/s', $page, $badge);
$badge = $badge[1];

$qreg = '/question-summary narrow.*?vote-count-post">(-?\d*).*?\/questions\/(\d*).*?>(.*?)<\/a>/s';
preg_match_all($qreg, $page, $questions, PREG_SET_ORDER);

$areg = '/(answer-summary">Questions:\n";
echo "\n";

foreach ($questions as $q)
{
    $query = 'SELECT count(id), votes FROM Questions WHERE id = '.$q[2].' AND type=0;';
    $dbitem = $db->query($query)->fetch(PDO::FETCH_ASSOC);
    if ($dbitem['count(id)'] > 0)
    {
        $lastQ = $q[1] - $dbitem['votes'];
        if ($lastQ == 0)
        {
            $lastQ = "";
        }
        $query = "UPDATE Questions SET votes = '$q[1]' WHERE id = '$q[2]'";
        $db->exec($query);
    }
    else
    {
        $query = "INSERT INTO Questions VALUES('$q[3]', '$q[1]', 0, '$q[2]')";
        echo "$query\n";
        $db->exec($query);
        $lastQ = "(NEW)";
    }
    echo "\n";
}

echo "
$lastQ$q[1]$q[3]
"; ?>

Michał Rudni.. 11

Kyle,为了让PDO/Sqlite工作,您需要对数据库所在目录的写权限.

另外,我看到你在循环中执行多个选择.如果您正在构建小而不重的东西,这可能没问题.否则,我建议构建返回多行的单个查询,并在单独的循环中处理它们.



1> Michał Rudni..:

Kyle,为了让PDO/Sqlite工作,您需要对数据库所在目录的写权限.

另外,我看到你在循环中执行多个选择.如果您正在构建小而不重的东西,这可能没问题.否则,我建议构建返回多行的单个查询,并在单独的循环中处理它们.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有