【问题标题】:SQLite3 with php 5.4 no db file created带有 php 5.4 的 SQLite3 没有创建 db 文件
【发布时间】:2013-10-18 11:57:10
【问题描述】:

我的问题很简单。

我正在尝试制作一个脚本,用于将 firebird 中的一个表中的信息转储到 SQLite 中的另一个表。

我能够完成所有过程,但我无法创建一个持久的 sqlite 数据库。我在我的计算机(Ubuntu 13.04)上的“/var/www/PabloLab/experiments”中启动了这个脚本,但我不知道文件在哪里创建或是否创建。

完整的脚本:

/*
 * Preparing SQLite db
 */

$dbname = 'langs.sqlite';
$my_table = 'LANG';

$db = new SQLite3($dbname, 0666);    
$query = "CREATE TABLE $my_table (ID INTEGER NOT NULL,
                                  TXT VARCHAR,
                                  LANG_ID NUMERIC NOT NULL)";
$success = $db->exec($query);    
$stmt = "SELECT r.ID, r.TXT, r.LANG_ID
         FROM VLANG r
         WHERE r.ID in (1,3)";
$sql = EF_sql_connection($stmt, MY_FIREBIRD_DB); //It works perfect, no problem here.
while ($lang_info = ibase_fetch_assoc($sql)) {
    $lang = utf8_encode($lang_info["TXT"]);
    $id = utf8_encode($lang_info["ID"]);
    $lang_id = utf8_encode($lang_info["LANG_ID"]);
    $stmt_sqlite = "INSERT INTO $my_table VALUES ($id, '$lang', $lang_id)";
    $success = $db->exec($stmt_sqlite);
}
$result = $db->query("SELECT * FROM $my_table");
while($row = $result->fetchArray()){
    $id = $row["ID"];
    $txt = $row["TXT"];
    $lang_id = $row["LANG_ID"];
    echo "$id - $txt - $lang_id<br>";
}

感谢您的帮助和时间。

问候。

【问题讨论】:

  • 尝试在 PHP 文件的最后添加 $db-&gt;close(); 语句。如果这不是问题,那么至少这样做是一种很好的形式。另外,请确保您的代码不会引发任何异常。
  • 感谢您的建议,但这不是解决方案。附言我真的忘了关闭连接;)
  • 我在我的机器上尝试了一个更简单的测试 (pastebin.com/9QS4k29k),并且数据库文件在与脚本相同的目录中正确创建 - 尽管这是一台 Windows 机器。确保 PHP 对该目录具有写入权限或明确指定它具有写入权限的目录。
  • 另外,$flags 参数应该是 SQLITE3_OPEN_READONLYSQLITE3_OPEN_READWRITE 和/或 SQLITE3_OPEN_CREATE(它们的值分别是 1、2 和 4),而你给它一个 Unix -style 0666 参数。在您的情况下,我猜您正在寻找的实际上是SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE,这恰好是默认值。尝试删除它。
  • 删除 0666 参数使其完美运行。谢谢大家的时间和回答。

标签: sqlite php-5.4


【解决方案1】:

(只是复制我解决 @reverendocabron 问题的评论以便于参考。)

$flags 参数应该是SQLITE3_OPEN_READONLYSQLITE3_OPEN_READWRITE 和/或SQLITE3_OPEN_CREATE(它们的值实际上分别是 1、2 和 4),而你给它一个 Unix 风格的 0666 参数。在您的情况下,我猜您正在寻找的实际上是SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE,这恰好是默认值。尝试删除 它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2016-01-27
    • 2013-06-11
    • 1970-01-01
    • 2023-03-05
    • 2017-01-20
    • 2018-05-10
    相关资源
    最近更新 更多