代码在Windows上工作,相同的代码在Linux上不起作用


Code works on Windows, same code doesn't work on Linux

我有一个网站,我正在开发与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创建新数据库时打开数据库(因此无法在那里找到您想要的表)。