加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite / PHP只读?

发布时间:2020-12-12 19:03:37 所属栏目:百科 来源:网络整理
导读:我一直试图在 PHP中使用SQLite与PDO包装器,并且成功地混合了.我可以从数据库中读取好的,但是当我在浏览器中查看页面时,我的更新都不会被提交给数据库.奇怪的是,从我的shell运行脚本不会更新数据库.我怀疑文件权限是罪魁祸首,但即使数据库提供完全访问(chmod
我一直试图在 PHP中使用SQLite与PDO包装器,并且成功地混合了.我可以从数据库中读取好的,但是当我在浏览器中查看页面时,我的更新都不会被提交给数据库.奇怪的是,从我的shell运行脚本不会更新数据库.我怀疑文件权限是罪魁祸首,但即使数据库提供完全访问(chmod 777),问题仍然存在.我应该尝试更改文件所有者吗?如果是这样,怎么办?

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

@Tom马丁

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

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

我决定加入相关代码.这将是或多或少的一个端口的Grant’s script到PHP.到目前为止,只是问题部分:

<?php

$db = new PDO('sqlite:test.db');

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"https://stackoverflow.com/users/658/kyle");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_COOKIE,"shhsecret=1293706652");
$page = curl_exec($ch);

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

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

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

$areg = '/(answer-summary"><a href="/questions/(d*).*?votes.*?>(-?d+).*?href.*?>(.*?)<.a)/s';
preg_match_all($areg,$answers,PREG_SET_ORDER);

echo "<h3>Questions:</h3>n";
echo "<table cellpadding="3">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]','$q[2]')";
        echo "$queryn";
        $db->exec($query);
        $lastQ = "(NEW)";
    }
    echo "<tr><td>$lastQ</td><td align="right">$q[1]</td><td>$q[3]</td></tr>n";
}

echo "</table>";

?>
Kyle为了使PDO / Sqlite能够正常工作,您需要对数据库所在目录的写入权限.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读