2016-08-04 5 views
1

der folgende Code mysqld_stmt_execute ist mir dieser Fehler auf einem gemeinsamen Host geben, wo es in dbSQLSTATE [HY000]: Allgemeiner Fehler: 1210 Falsche Argumente

$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(); 

aber auf meine Config kein Wert auf die betrachtete Tabelle Datei ist i entfernen

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

dann der Fehler verschwindet, aber ohne PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION wie kann ich die Fehler wissen?

dank

+0

@NorbertvanNobelen: Sie können. Platzhalter können beliebige Werte in der Abfrage ersetzen. Sie können keine Schlüsselwörter/Deskriptoren ersetzen. –

Antwort

0

Dies geschieht, weil Sie brauchen zu binden Variablen in der Grenze und Offset nicht. Sie sollten nur in der Where-Bedingung binden. Sie können direkt zur Abfrage setzen. Siehe unten:

$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

jetzt bekomme ich den folgenden Fehler – lalthung

+0

Fataler Fehler: Uncaught Ausnahme 'PDOException' mit Nachricht 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, damit die richtige Syntax in der Nähe von '-10' in Zeile 1 verwendet wird. – lalthung

+3

Dies geschieht, weil Sie negative Werte (-10) im LIMIT- oder OFFSET-Befehl verwenden. Verwenden Sie nur positive Werte. – msantos

0

Ich kann falsch sein, aber ich glaube, das Problem ist, dass Sie mit „: memberID“ im bindParam Anruf. Der Parametername ist "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

Es wird so oder so in PDO funktionieren. Ursprünglich * benötigt * den führenden Doppelpunkt, wenn Sie den Parameter binden, dann wurde er in späteren Versionen optional. –

+0

und ich habe das und jetzt sehe ich diesen Fehler – lalthung

+0

Fataler Fehler: Uncaught Ausnahme 'PDOException' mit Nachricht 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax entspricht, um in der Nähe von '-10' in Zeile 1 ' – lalthung

Verwandte Themen