【问题标题】:Read a SQLite database in PHP? (made using sencha touch sqlite)用 PHP 读取 SQLite 数据库? (使用 sencha touch sqlite 制作)
【发布时间】:2012-07-13 12:14:56
【问题描述】:

我有一个使用 Sencha Touch (here) 中的 SQLite 端口创建的 SQLite 数据库,数据库名称是“cars”,不带引号,其中的表称为“cars_table”,不带引号。

我能够在 javascript 中完美地读取/写入/更新 SQLite 表,当我查看 google chrome 上的“Cookies/Local Storage”页面时,我发现我的域下的数据库设置了正确的数据库名字。

但是,我完全无法从 PHP 读取或写入它。我有 PHP 5.3 并且在检查 phpinfo() 时我已经准备好使用 SQLite。

有什么想法吗?

我的基本 PHP 代码只是:

$dbhandle = sqlite_open('cars');
$query = sqlite_query($dbhandle, 'SELECT * FROM cars_table');
$rows = sqlite_num_rows($query);
echo $rows;

PHP 中的错误:

Warning: sqlite_query(): no such table: cars_table in     /var/www/manage/testall/www/thesqlite.php on line 6 Warning: sqlite_num_rows() expects parameter 1 to be resource, boolean given in /var/www/manage/testall/www/thesqlite.php on line 7

编辑 2:

使用 sqlite_master 搜索列出表名时,我看到 0 个表。所以错误可能出在数据库名称中(在这种情况下,我错过了 sencha touch 应用程序是如何命名它的)。

【问题讨论】:

  • 1.) 当您尝试使用 php 时实际发生了什么?和 2.) 你确定你在同一台机器上使用 javascript 和 php 吗?
  • 运行该代码时会得到什么结果或错误消息?
  • 没有错误或结果。纯属空白页。 javascript 和 php 都托管在同一文件夹中的同一台服务器上(具有完整的读/写权限)。
  • 要显示错误,请在 PHP 代码的开头添加以下代码:error_reporting(E_ALL); ini_set('display_errors', 1);
  • 谢谢!错误已被编辑到帖子底部

标签: php javascript sqlite sencha-touch


【解决方案1】:

我将根据错误和您提供的代码走相反的路径:

Warning: sqlite_query(): no such table: cars_table in /var/www/manage/testall/www/thesqlite.php on line 6 Warning: sqlite_num_rows() expects parameter 1 to be resource, boolean given in /var/www/manage/testall/www/thesqlite.php on line 7

表示$query 是布尔值(在这种情况下为假)而不是资源。

$query 为 false,因为 sqlite_query($dbhandle, 'SELECT * FROM cars_table') 是一个失败的查询,因为数据库中不存在 cars_table

cars_table 不存在于数据库中,因为数据库刚刚由您的语句 sqlite_open('cars') 创建(是的,刚刚创建),因此数据库没有表。这是默认行为,正如您在评论中提到的那样cars 是服务器(php 运行的地方)上不存在的文件,因为好的 cars 文件/数据库位于客户端(浏览器),javascript 可以访问和操作它。

但是,小心,您可以在您的服务器中找到cars 文件/数据库,因为每次找不到时,SQLite 都会将其创建为空。

如果您需要使用正版cars文件/数据库,您需要先上传到服务器。

【讨论】:

  • 谢谢!我想我把 sqlite 更像是一个 cookie 文件,它位于客户端,但可以由 PHP 从服务器读取。我想我需要找到一种方法来遍历客户端的 sqlite 并上传到服务器,反之亦然。
【解决方案2】:

已编辑
表看看这里 How to list the tables in an SQLite database file that was opened with ATTACH?

如果表不存在,那么您可以对不存在的表执行任何查询,因此您会得到 FALSE。

【讨论】:

  • 我相信 sqlite_open 会在数据库不可用时自动创建数据库......所以它总是会弹出“数据库已打开”。即使使用完全随机的数据库名称,例如“asaskfjdsnkf”。 (我可能是错的,但它显示为我测试的所有内容都打开了)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多