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

时间:2014-06-20 18:22:19

标签: php sql windows sqlite

我有一个我正在使用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.";
     }
  }
?>

1 个答案:

答案 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创建新数据库时打开数据库(因此找不到您想要的表)。