在数据库类中将其用于PDO连接后删除文件(使用unlink()):权限被拒绝

时间:2015-08-18 18:34:50

标签: php mysql pdo

所以我有以下php脚本test.php:

<?php

class Database {

    public $databaseConnection;

    function __construct(){
        $this->databaseConnection = new PDO('sqlite:test.sq3', 0, 0);
        $this->databaseConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        self::query('CREATE TABLE...');
    }

    function query($sql, $params = NULL){
    ...
    }   

    function insert($table, $data){
    ...
    }
}

$database = new Database();

$database->insert(...);//insert something into Database

$userData = $database->query(...);//getting $userData after query

$username = $userData;

print_r($username);

$database = null;

unlink('test.sq3');

所以每个人都能正常工作直到最后一行。

Permission denied in F:\...\test.php on line 75

我已经查阅了文档中的内容:

Instruction separation: 

http://php.net/manual/en/language.basic-syntax.instruction-separation.php

Connections and Connection management (of PDO-objects): 

http://php.net/manual/en/pdo.connections.php

因此,要结束PDO-ocject与数据库的连接,必须设置= null。

之后我尝试了:

unset($database);

许可被拒绝。所以我做了一个extern文件delete.php:

<?php unlink('test.sq3'); ?>

此脚本正常运行。所以我可以在另一个脚本中删除该文件。 我尝试的最后一件事(使用= null和unset()):

include('delete.php');

哪个都不起作用。但主要的是我不知道为什么我不能在同一个脚本中删除文件。

那么如何在同一个脚本中删除数据库文件呢?

1 个答案:

答案 0 :(得分:0)

所以现在我发现什么是错的。在方法查询中看起来像:

    function query($sql, $params = NULL){
        $s = $this->databaseConnection->prepare($sql);
        if(is_array($params)){
            $s->execute(array_values($params));
            return $s;
        }
        $s->execute((array) $params);
        return $s;
    }

正如你所看到的那样,没有fetch() - 语句,因为我想尝试一下没有它的情况。所以你得到一个输出就像:

PDOStatement Object ( [queryString] => SELECT username FROM user WHERE numberoflogins = ? )

我跳过了它,因为我觉得它在工作时并不是真的有必要。

好吧,至少我不知道这个PDO方法对我脚本的结尾有什么东西,因为我取消了与PDO对象有一些东西的每个变量,但关键是现在他删除了文件。