我一直试图在
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 "$query\n"; $db->exec($query); $lastQ = "(NEW)"; } echo "<tr><td>$lastQ</td><td align=\"right\">$q[1]</td><td>$q[3]</td></tr>\n"; } echo "</table>"; ?>