sqlite3数据库打开以供阅读,但不能用于在php中编写

时间:2016-06-09 17:27:00

标签: php sqlite

尝试使用以下代码从服务器读取数据库(通过桌面本身的localhost)。打开数据库文件以进行读取,但不打开插入记录。

FORM HTML FILE:

<html>
<form action="fruit_action.php" method="post">
 <p>Enter name of fruit: <input type="text" name="sent_fruit" /></p>
 <p><input type="submit" /></p>
</form>
</html>

行动PHP文件:

<html>
<?php 

$fruit = $_POST['sent_fruit']  ; 
echo "<p>$fruit</p>" ; 

$db = new SQLite3("/home/iusr/fruit_prefs.sqlite") or die('Not able to open file.');

# PRINT OUT ITEMS IN DATABASE CORRECTLY: 
$res = $db->query("select * from fruit_codes"); 
echo "<p>Fruits in database:"; 
while ($row = $res->fetchArray()) { echo "$row[name_fruit];"; }
echo "</p>";
# ABOVE WORKS WELL; 

# ERROR ON FOLLOWING LINE: 
$result = $db->exec('INSERT INTO fruit_codes (name_fruit) VALUES ($fruit); ')  or die('Not able to insert record');

$db = null;

?>
</html>

输出:

mango

Fruits in database:apple;pear;orange;


Warning: SQLite3::exec(): unable to open database file in /var/www/htdocs/fruit_action.php on line 15
Not able to insert record

我在Linux工作。数据库文件位于主目录中,所有权限均已启用:

$ ls -l fruit*.sqlite
-rwxrwxrwx 1 iusr users 7168 Jun  9 19:15 fruit_prefs.sqlite

如何解决此错误?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

PHP(webserver用户)创建一些文件(日志)来执行SQLite3 :: exec(),因此它需要对您的数据库具有写权限。

尝试在该db文件上为PHP(webserver用户)提供写入权限。

更多信息http://php.net/manual/en/sqlite3.exec.php,请参阅用户提供的便笺

另外https://www.daniweb.com/programming/web-development/threads/462894/unable-to-open-db-file

答案 1 :(得分:1)

我认为,PHP需要能够编写SQLite DB文件所在的目录,例如:对于journaling,在您的示例中似乎并非如此。尝试在应用程序docroot中找到数据库。