Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法对文件执行SQLite查询_Php_Sql_Sqlite_Pdo - Fatal编程技术网

Php 无法对文件执行SQLite查询

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]:

我有一个奇怪的问题,当代码在另一个文件上运行时,我无法在SQLite数据库文件上执行最简单的查询。创建新PDO实例时没有错误。该权限足以用于只读目的(644)

但当我跑步时:

$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));