我整个上午都在努力让 php 与 sqlite 数据库一起工作。这是我尝试执行的一段 php 代码:
#less /var/www/html/test.php
<?php
$db=new PDO("sqlite:/var/www/test.sql");
$sql = "insert into test (login,pass) values ('login','pass');";
$db->exec($sql);
?>
以下是我进行测试的方法:
# sqlite3 /var/www/test.sql
sqlite> create table test (login varchar,pass varchar);
#chown apache:apache /var/www/test.sql
#chmod 644 /var/www/test.sql
以下是让我抓狂的事情:当我从命令行执行时:
#php test.php
一切顺利。Sql 正在执行,我可以看到数据库中出现了一个新行。
当我从浏览器执行相同的脚本时 - sql 未被执行。我没有在数据库中获得新行。apache 日志文件中没有错误。
请帮忙
更新:
好的,我找到答案了。看起来 sqlite 正在尝试在“INSERT”查询上创建一个新的 -journal 文件。strace 很棒:
open("/var/www/test.sql-journal", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = -1 EACCES (Permission denied)
所以,我必须将 sqlite 数据库移动到 apache 可以写入的目录。
答案1
命令行 PHP 和在 Web 服务器上执行的 PHP 通常使用不同的 php.ini 文件,因此值得检查是否存在任何差异。您可能还安装了不同版本的 PHP,请检查命令行和 Web 服务器是否具有相同的版本。我见过 Apache 运行 PHP5 而命令行 php 运行 PHP4 的服务器,除非您使用 PHP5 二进制文件的完整路径。