Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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_Pdo_Sqlite - Fatal编程技术网

Php SQLite准备的语句不插入

Php SQLite准备的语句不插入,php,sql,pdo,sqlite,Php,Sql,Pdo,Sqlite,我正在尝试使用PDO插入数据库,但是在完成脚本并进行测试之后,我没有看到插入数据库的任何类型的输入,我尝试从PDO返回错误,但什么都没有。我不知道发生了什么事 我已经更新了参数名,它们似乎没有随着代码的结果而改变任何东西。q()函数似乎有问题 数据库已初始化,如下所示: function __construct() { if ( ! file_exists( dbpath . DB ) ) { $this->db = true;

我正在尝试使用PDO插入数据库,但是在完成脚本并进行测试之后,我没有看到插入数据库的任何类型的输入,我尝试从PDO返回错误,但什么都没有。我不知道发生了什么事

我已经更新了参数名,它们似乎没有随着代码的结果而改变任何东西。q()函数似乎有问题

数据库已初始化,如下所示:

    function __construct() {
        if ( ! file_exists( dbpath . DB ) ) {
            $this->db = true;
            $this->open( dbpath . DB, SQLITE3_OPEN_CREATE|SQLITE3_OPEN_READWRITE ) or $this->db = false;
            if ( $this->db == false ) {
                return false;
            }
            $table = "CREATE TABLE link_hits( id INTEGER PRIMARY KEY AUTOINCREMENT, link TEXT NOT NULL, hits INT NOT NULL, date_added datetime default current_timestamp)";     
            $this->exec($table);
        } else { 
            $this->db = true;
            $this->open( dbpath . DB, SQLITE3_OPEN_CREATE|SQLITE3_OPEN_READWRITE ) or $this->db = false;
            if ( $this->db == false ) {
                return false;
            }
        }
    }
预置语句函数

    function q ( $q, $v ) {
        if ( $this->db ) {
            $this->securedb = $this->prepare( $q );
            foreach ( $v as $k=>$vv ) {
                if ( is_numeric( $vv ) ) {
                    $this->securedb->bindValue($k, $vv, SQLITE3_INTEGER);
                } else {
                    $this->securedb->bindValue($k, $vv, SQLITE3_TEXT);
                }
            }
            $this->errorInfo = $this->errorInfo();
            return ( ( $this->handle = $this->execute() ) == true ) ? $this->handle : false;
        }
        return false;
    }
添加链接功能

    function addlink ( $link ) {

        if ( $this->linkexists( $link ) ) {
            return false;
        }

        $this->que = "INSERT INTO link_hits (link, hits) VALUES (:link, :hits)";
        $this->input = array(
                            ':link' => $link,
                            ':hits' => 0
                             );
        return ( $this->q( $this->que, $this->input ) ) ? true : false;

    }
我的陈述是否正确?我学习了几本教程。我真的很习惯MySQL,但无法访问它(

甚至我的linkexists函数也抛出了一个false。是的,链接在那里,我用一个普通的查询强制它

    function linkexists( $link ) {

        $this->que = "SELECT link FROM link_hits WHERE type='table' AND link=':link'";
        $this->input = array(
                    ':link' => $link
                );
        return ( ( $this->handle = $this->q( $this->que, $this->input ) ) == true ) ? true : false;

    }
不能以分号结尾:

$this->que = "INSERT ... VALUES (:link, :hits)";

为什么要在绑定变量旁边附加一个
?在几个例子中看到了。这只是一种模式,任何东西都可以使用IE*{{124;}*key;:;…至少据我所知。在
linkexists
中,语句有许多引号;PDO将自动插入这些引号。尝试以下操作:
SELECT link FROM link_hits WHERE type=:type AND link=:link
-但是对于您的主要问题,我没有任何线索。:)谢谢,但它仍然抛出相同的错误。不管怎样,这都是多余的。即使是用于检查表是否存在的PDO文档也使用这个标记,包括半引号。我已经更改了参数,但仍然是相同的场景。即使是我的Linkedxis也会抛出一个错误。