2016-08-04 332 views
1

下面的代码是给我一个共享的主机对这个错误在没有价值的看表DBSQLSTATE [HY000]:常规错误:1210个不正确的参数mysqld_stmt_execute

$query = "SELECT COUNT(*) FROM viewed WHERE memberID = :memberID"; 
     $stmt = $db->prepare($query); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
     $stmt->execute(); 
     $total = $stmt->fetchColumn();  

$pages = ceil($total/$per_page); 

$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 1, 
'min_range' => 1, 
), 
))); 

$offset = ($page - 1) * $per_page; 

$query = "SELECT * FROM viewed WHERE memberID = :memberID ORDER BY id DESC LIMIT :per_page OFFSET :offset"; 

     $stmt = $db->prepare($query); 
     $stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT); 
     $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
     $stmt->execute(); 

$result = $stmt->fetchAll(); 

,但是,我的配置文件是我删除

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

那么错误,但没有消失PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION我怎么知道错误?

谢谢

+0

@NorbertvanNobelen:你可以。占位符可以代替查询中的任何VALUES。他们不能代替关键字/描述符。 –

回答

0

发生这种情况是因为您不需要绑定限制和偏移量中的变量。您应该只使用绑定在where条件。您可以直接查询。请看下图:

$query = "SELECT * FROM viewed WHERE memberID = :memberID ORDER BY id DESC LIMIT $per_page OFFSET $offset"; 

     $stmt = $db->prepare($query); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
+0

现在我收到以下错误 – lalthung

+0

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,在第1行'-10'附近使用正确的语法。 – lalthung

+3

这是因为您在LIMIT或OFFSET命令中使用了负值(-10)。只使用正值。 – msantos

0

我可能是错的,但我认为,问题是,你使用:在bindParam呼叫“成员”。参数名称是“memberID”。

$query = "SELECT * FROM viewed WHERE memberID = :memberID ORDER BY id DESC LIMIT $per_page OFFSET $offset"; 

    $stmt = $db->prepare($query); 
    $stmt->bindParam('memberID', $uid, PDO::PARAM_INT); 
+1

它可以在PDO中以任何方式工作。最初,它绑定参数时需要*前导冒号,然后在更高版本中,它变成了可选项。 –

+0

,我确实喜欢,现在我看到这个错误 – lalthung

+0

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在删除行setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION)时在第一行''-10'附近使用正确的语法' – lalthung

相关问题