Sql准备语句execute()错误

时间:2017-07-26 12:41:50

标签: php mysql sqlite prepared-statement

我正在尝试为我的PHP SELECT查询使用预准备语句,但我收到此错误

  

SQLite3Stmt :: execute()需要0行参数,1在第75行的C:\ xampp \ htdocs \ xport \ post.php中给出

这里有什么问题?我引用了here

的答案

但这不起作用。下面是我的代码。

$postid = (int) $_GET['post_id'];

$userpostquery = "SELECT * FROM  users WHERE userid = ?";
$stmt = $db->prepare($userpostquery);
$stmt->execute([$postid]);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{
    $cname = $row['cname'];

    echo $cname;
}

感谢。

1 个答案:

答案 0 :(得分:1)

虽然SQLite语法类似于PDO,但您无法在execute中传递参数(请参阅手册 - http://php.net/manual/en/sqlite3stmt.execute.php,此函数的参数不可用) 。因此,您需要使用bindParam / bindValue

其次,execute()方法返回SQLiteResult,您应该迭代它,现在超过$stmt

第三,SQLiteResult没有 fetch方法,只有fetchArray。 第四 - 因为你不使用PDOPDO::常数是没用的。

$postid = (int) $_GET['post_id'];

$userpostquery = "SELECT * FROM  users WHERE userid = ?";
$stmt = $db->prepare($userpostquery);
// treat $postid as INTEGER
$stmt->bindParam(1, $postid, SQLITE3_INTEGER);
// get SQLiteResult
$result = $stmt->execute();

while ($row = $result->fetchArray(SQLITE3_ASSOC)) 
{
    $cname = $row['cname'];

    echo $cname;
}