【问题标题】:SQLite on localhost with php doesn't work (Linux)使用 php 在 localhost 上的 SQLite 不起作用(Linux)
【发布时间】:2012-04-29 15:58:40
【问题描述】:

我试图让我的第一个 sqlite 程序使用 php 在 localhost 上工作,但我无法让它工作。在我的机器上,我安装了 Sqlite3,并且在 C/C++ 上一切正常。

如果我将创建的数据库移动到本地主机,则授予 db 文件读/写权限并尝试通过 php 访问它们,我收到以下错误消息:

文件已加密或不是数据库

这是我使用的示例代码:

<?php
$dbhandle = sqlite_open("m_test1.db", 0666, $error);
if (!$dbhandle) die ($error);

$stm = "CREATE TABLE Friends(Id integer PRIMARY KEY," . 
   "Name text UNIQUE NOT NULL, Sex text CHECK(Sex IN ('M', 'F')))";
$ok = sqlite_exec($dbhandle, $stm, $error);

if (!$ok)
   die("Cannot execute query. $error");

echo "Database Friends created successfully";
sqlite_close($dbhandle);
?>

如果我在数据库不存在时通过浏览器运行此代码,那么我会得到:

无法打开数据库:/var/www/m_test1.db

信息:

sqlite_libversion:2.8.17
php版本:5.3.2-1ubuntu4.14
linux Ubuntu 10.04

通过查看 phpinfo,似乎启用了 SQLite、SQLite3 和 PDO_Sqlite。

我们将不胜感激。

编辑: 解决方案是:'chmod ugo+rwx /var/www' :)
之后 sqlite_open 和 PDO 都可以创建数据库。

【问题讨论】:

  • @jdhartley:这个问题肯定有骗子,但你提到的不是其中之一;这甚至不是同一个错误。
  • @sixfeetsix 这不是同一个错误吗? PHP是说文件是加密的还是不是数据库,解决办法是他需要用PHP5的PDO。
  • @sixfeetsix 另一个问题没有具体说明是哪一行代码导致了错误,个人经验这个错误是PHP5使用sqlite_open引起的。
  • @jdhartley:是的,抱歉,我正在查看其他线程,假设这是您的欺骗,抱歉。我仍然不同意另一个问题是 exact 欺骗。

标签: php apache sqlite


【解决方案1】:

PHP5 不适合sqlite_open()。您需要改用 PDO,如下所示:https://stackoverflow.com/a/4751965/369032

(从上面的答案复制的代码)

try 
{
    /*** connect to SQLite database ***/

    $dbh = new PDO("sqlite:VPN0.sqlite");
    echo "Handle has been created ...... <br><br>";

}
catch(PDOException $e)
{
    echo $e->getMessage();
    echo "<br><br>Database -- NOT -- loaded successfully .. ";
    die( "<br><br>Query Closed !!! $error");
}

echo "Database loaded successfully ....";

【讨论】:

  • PDO 也不想工作:SQLSTATE[HY000] [14] 无法打开数据库文件数据库 -- 未 -- 成功加载.. 查询已关闭!!!
猜你喜欢
  • 2012-09-11
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多