PHP PDO连接到SQLITE数据库

3
今天早上我尝试使用PDO连接SQLite数据库并创建一个表格。首先,我创建了一个名为db.sqlite的文件,然后建立了我的连接并执行了一个"create table"查询,但是execute pdo函数始终返回false。
$pdo = new PDO("sqlite:db.sqlite");
$STH = $pdo->prepare(
'CREATE TABLE "users" (
     "id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , 
     "full_name" VARCHAR, 
     "description" TEXT, 
     "token" INTEGER);
    ');
 $STH->execute();

所以接下来我做的是将连接中的db.sqlite移除,并替换成:memory:来创建一个内存数据库,这样做完美地解决了问题。

$pdo = new PDO("sqlite::memory:");

我很困惑,为什么我可以使用:memory:而不是文件,该怎么解决这个问题?

以下是我开启异常时遇到的错误: enter image description here


1
要访问磁盘上的数据库,请将绝对路径附加到DSN前缀中。请注意 - absolute - u_mulder
@u_mulder,绝对路径?就像从根目录开始的路径,这似乎不太好,考虑到我的应用程序可能会被分发,人们将在不同的路径中存储应用程序。 - George
@u_mulder,:) 哈哈,但是说真的我卡住了。 - George
2
也许有用?$dsn = "sqlite:" . __DIR__ .'/db.sqlite';。另外,我为我的网站定义了一个常量,即 home 或顶级目录,称为 APP_HOME_ROOT。所有数据都可以在该根目录下的 data 目录中找到。所以我 define('APP_DATA_ROOT,' APP_DATA_ROOT . '/data');。是的,这也适用于 Windows。 - Ryan Vincent
1
错误 - 应该是:define('APP_DATA_ROOT', APP_HOME_ROOT . '/data')。无论如何 - 你明白的,对吧? ;-/ - Ryan Vincent
显示剩余2条评论
1个回答

1
它无法工作的原因是文件 database.sqlite 位于 /var/www/ 目录中,这会自动授予它 RW-RW-R-- 权限,意味着您将无法更改文件的结构。我做了两件事,首先我更改了www目录的所有者。
chown -R <your username>:<your username> www/*

然后更改了项目目录的权限。
chmod -R 777 <project>/*

并且它对我有效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接