我有一个我正在使用PHP5 + SQLite3开发的网站,它在我的计算机上就像WAMP上的魅力一样,但由于某种原因它在我的Debian服务器上不起作用,我没有得到任何错误,我可以通过adminer.php访问我的数据库,但我自己的PHP代码似乎无法访问它。
以下是错误日志的最后两行:
[Fri Jun 20 01:33:37 2014] [error] [client 93.2.64.89] PHP Warning: SQLite3::query(): Unable to prepare statement: 1, no such table: morceaux in /home/sim/www/gaec/sqlite-read.php on line 12
[Fri Jun 20 01:33:37 2014] [error] [client 93.2.64.89] PHP Fatal error: Call to a member function fetchArray() on a non-object in /home/sim/www/gaec/sqlite-read.php on line 14
这是我的DB-test php文件:
<?php
$dbname='viandes.db3';
$mytable ="morceaux";
if(!class_exists('SQLite3'))
die("SQLite 3 NOT supported.");
$base=new SQLite3($dbname, 0666);
$query = "SELECT DISTINCT Animal FROM $mytable WHERE LENGTH(Animal)>0";
$results = $base->query($query);
while ($row = $results->fetchArray())
{
if(count($row)>0)
{
$title = $row['Animal'];
echo "</br> $title </br>";
}
else
{
echo "Can't access $mytable table.";
}
}
?>
答案 0 :(得分:0)
来自文档:
public SQLite3::__construct ( string $filename [, int $flags [, string $encryption_key ]] )
实例化一个SQLite3对象并打开一个 连接到SQLite 3数据库。如果构建包括加密, 然后它将尝试使用密钥。
参数
filename
SQLite数据库的路径,或:内存:在内存中使用 数据库中。
flags
用于确定如何打开SQLite的可选标志 数据库。默认情况下,open使用SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE
。
SQLITE3_OPEN_READONLY
:打开数据库以供阅读。
SQLITE3_OPEN_READWRITE
:打开数据库进行阅读和写作。
SQLITE3_OPEN_CREATE
:如果数据库不存在,则创建数据库。
通过传递0666
您实际上正在传递SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE
,如果该文件不存在,则会创建一个空数据库。这些标志不是文件权限。
您的数据库文件名很可能与代码中的文件名不同。 Windows忽略大小写并在Linux创建新数据库时打开数据库(因此找不到您想要的表)。