Php 无法对文件执行SQLite查询
我有一个奇怪的问题,当代码在另一个文件上运行时,我无法在SQLite数据库文件上执行最简单的查询。创建新PDO实例时没有错误。该权限足以用于只读目的(644) 但当我跑步时:Php 无法对文件执行SQLite查询,php,sql,sqlite,pdo,Php,Sql,Sqlite,Pdo,我有一个奇怪的问题,当代码在另一个文件上运行时,我无法在SQLite数据库文件上执行最简单的查询。创建新PDO实例时没有错误。该权限足以用于只读目的(644) 但当我跑步时: $sth = $dbh->prepare('select * from message'); $result = $sth->execute(); 或 两者都返回FALSE 它在$dbh->prepare行上抛出错误:“致命错误:未捕获异常'PDOException',消息为'SQLSTATE[HY000]:
$sth = $dbh->prepare('select * from message');
$result = $sth->execute();
或
两者都返回FALSE
它在$dbh->prepare
行上抛出错误:“致命错误:未捕获异常'PDOException',消息为'SQLSTATE[HY000]:一般错误:14无法打开数据库文件'”
同样,上述代码在另一个数据库文件上运行正常
另一个信息:我可以在MesaSQLite(Mac上的SQLite文件查看器)中打开有问题的文件
我错过了什么吗?我用的是这样的东西。我不知道这是否有用
<?php
try {
// create a new instance of a PDO connection
$db = new PDO("sqlsrv:Server=localhost;Database=myDatabase", $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql='SELECT * FROM message';
$stmt = $db->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {
echo "<pre>";var_dump($row);echo"</pre>";
}
}
catch(PDOException $e) {
// if the connection fails, display an error message
echo 'ERROR: ' . $e->getMessage();
$errmsg = $e->getMessage();
error_log('$errmsg-> '.$errmsg);
}
它们返回false有一个很好的理由,当这种情况发生时,您必须检查错误,然后去修复它们:
- 连接时检查错误
- 准备时检查错误
- 执行时检查错误
使用prepare()
:
try
{
$dbh = new PDO("sqlite:$db");
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->query('select * from message');
if(!$sth) {
echo "query() failed :\n";
print_r($dbh->errorInfo());
die();
}
$result = $sth->fetchAll();
if($result) {
var_dump($result);
}else{
echo "No result !";
}
}
catch(PDOException $e)
{
echo "PDO Exception caught: ";
echo $e->getMessage();
die();
}
$dbh = new PDO("sqlite:$db", null, null,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
使用query()
:
try
{
$dbh = new PDO("sqlite:$db");
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->query('select * from message');
if(!$sth) {
echo "query() failed :\n";
print_r($dbh->errorInfo());
die();
}
$result = $sth->fetchAll();
if($result) {
var_dump($result);
}else{
echo "No result !";
}
}
catch(PDOException $e)
{
echo "PDO Exception caught: ";
echo $e->getMessage();
die();
}
$dbh = new PDO("sqlite:$db", null, null,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
要在创建连接时设置错误模式,请执行以下操作:
似乎无法在$dbh->prepare
行上打开数据库文件。奇怪的是,它在连接到数据库文件时没有发现问题。上面的代码适用于不同的数据库文件。@user173457这是因为错误属性是在连接后设置的。请尝试这种方法$dbh=new PDO(“sqlite:$db”,null,null,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION))代码>您将看到错误!
$dbh = new PDO("sqlite:$db", null, null,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));