SQLite准备好的语句没有插入

时间:2014-03-25 07:06:50

标签: php sql pdo sqlite

我正在尝试使用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函数也会抛出错误。是的,链接就在那里,我用正常的查询强迫它。

    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;

    }

1 个答案:

答案 0 :(得分:0)

Parameter names不得以分号结尾:

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