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