我有一个网站,我正在开发与PHP5 + SQLite3,它的世界就像一个魅力在我的电脑上的WAMP,但由于某种原因它不工作在我的Debian服务器上,我没有得到任何错误,我可以访问我的数据库通过管理员。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.";
}
}
?>
From the docs:
public SQLite3::__construct ( string $filename [, int $flags [, string $encryption_key ]] )
实例化一个SQLite3对象并打开一个连接到SQLite 3数据库。如果构建包含加密,然后它将尝试使用密钥。
参数
filename
SQLite数据库的路径,或者:memory:在内存中使用数据库。
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创建新数据库时打开数据库(因此无法在那里找到您想要的表)。