我也被 SQLite 的宏伟主张所吸引。然而,就像许多其他软件一样,我遇到了过时的问题,并且不太容易关注好心开发人员的文档和博客。没有更多的抱怨,这里是环境的问题和细节:
我有一个运行 PHP 5.2.17 的网络主机提供商,安装了 SQLite 版本 2.8.17。phpinfo() 输出显示(在 pdo_sqlite 部分下)SQLite 版本是 3.3.7。在家里,我有运行 PHP 5.4.10 的 Apache 服务器。phpinfo() 在两个站点都可以正常工作。家用笔记本电脑说(在 sqlite3 下)版本是 3.7.7.1。
关于这个问题,我想创建一个带有几个表的数据库,并在家庭计算机和远程主机之间来回传输它(数据文件)。我正在尝试创建一个 PHP 脚本来
- 如果不存在则创建表腿...
- 删除现有行
- 插入一些新行
- 读取表格并将其打印为 Html 表格
不知何故,我组成了这个文件 dbc1.php,它在远程服务器上运行良好。类似的文件 dbc2.php 在“如果不存在”子句上失败,然后在其他语句上失败,如果数据库文件是由 dbc1.php 创建的,则甚至无法读取该文件。错误信息是:
file is encrypted or is not a database
如果我移动文件,dbc2.php 将创建它,但无法获取插入的行。本地主机版本抱怨说
“在第 14 行调用 C:\Web\php\dbcheck.php 中未定义的函数 sqlite_libversion()”
在我的 php.ini 文件中,我没有注释两个扩展名“php_pdo_sqlite.dll”和“php_sqlite3.dll”,并检查了这两个 dll 文件是否都存在于“ext”文件夹中。我还需要做什么?问题:
- dbc1.php 中的样式是否优于 dbc2.php?为什么或者为什么不?
- SQLite 数据库文件真的像声称的那样可移植吗?
- 我可以有一个指向 PHP5-SQLite3 教程的指针吗?
- 为什么我从 phpinfo() 和 sqlite_libversion() 得到不同的版本号?
预先感谢您的回复。下面是 3 个 PHP 文件,虽然我希望使用 1 个单独的文件来执行操作。
<html>
用 PHP 测试 SQLite
'; 回声“SQLite 版本:”。sqlite_libversion() 。'
';
$db = new PDO('sqlite:dbname.db'); echo "[SQLite] DB opened<br/>";
$db -> exec ($qc0); echo "[SQLite] table created<br/>";
$db -> exec ($qr1); echo "[SQLite] Rows deleted<br/>";
$db -> exec ($qi1); $db -> exec ($qi2);
$db -> exec ($qi3); $db -> exec ($qi4); echo "[SQLite] Rows inserted<br/>";
try {
$rowsOfTable = $db -> query ($qr5);
print "\t<table border='0' cellspacing='4' cellpadding='4'\n" .
"\t\t\tstyle='padding-top:20px;'>\n";
print "\t\t<tr><td>Creation</td><td>Legs</td></tr>\n";
foreach ($rowsOfTable as $row) {
echo "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] . "</td>\n" .
"\t\t\t<td align='right'>" . $row['count'] . "</td>\n" .
"\t\t</tr>\n";
}
print "\t</table>\n";
} catch (PDOException $ex) {
die ($ex->getMessage());
}
?>
这是同一台 Unix 服务器上不起作用的文件:
<html>
用 PHP 测试 SQLite \n"; echo "SQLite 版本:" . sqlite_libversion() . "
\n";
try {
$db = new SQLiteDatabase('./dbname.db', 0644, $error);
echo "SQLite DB opened<br/>\n";
$db -> queryExec ($qc0, $error); echo "[SQLite] table created<br/>\n";
$db -> queryExec ($qr1, $error); echo "[SQLite] Rows deleted<br/>";
$db -> queryExec ($qi1, $error);
$db -> queryExec ($qi2, $error);
$db -> queryExec ($qi3, $error);
$db -> queryExec ($qi4, $error); echo "[SQLite] Rows inserted<br/><br/>";
if ($tableFromDB = sqlite_query ($db, $qr5, SQLITE_BOTH, $error)) {
print "\t<table border='2' cellpadding='4'>\n";
while ($row = $tableFromDB -> fetch()) {
print "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] .
"</td><td>" . $row['count'] . "</td>\n\t</tr>\n";
}
print "\t</table>\n";
} else {
echo "Cannot query DB table: $error\n";
}} catch (Exception $ex) {
die ($error);
}
?>
最后,我试图在笔记本电脑上运行的代码:
<html>
用 PHP 测试 SQLite
phpinfo(); echo "PHP 版本:" . php版本()。'
'; 回声“SQLite 版本:”。sqlite_libversion() 。'
';
$db = new PDO('sqlite:dbname.db'); echo "[SQLite] DB opened<br/>";
$db -> exec ($qc0); echo "[SQLite] table created<br/>";
$db -> exec ($qr1); echo "[SQLite] Rows deleted<br/>";
$db -> exec ($qi1); $db -> exec ($qi2);
$db -> exec ($qi3); $db -> exec ($qi4); echo "[SQLite] Rows inserted<br/>";
try {
$rowsOfTable = $db -> query ($qr5);
print "\t<table align='center' border='0' cellspacing='4' cellpadding='4'\n" .
"\t\t\tstyle='padding-top:20px;'>\n";
print "\t\t<tr><td>Creation</td><td>Legs</td></tr>\n";
foreach ($rowsOfTable as $row) {
echo "\t\t<tr>\n" .
"\t\t\t<td>" . $row['name'] . "</td>\n" .
"\t\t\t<td align='right'>" . $row['count'] . "</td>\n" .
"\t\t</tr>\n";
}
print "\t</table>\n";
} catch (PDOException $ex) {
die ($ex->getMessage());
} ?>
大家,新年快乐 :)