Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was mache ich beim Konvertieren falsch?

prepare() geht mit execute()

Vorbereitete Anweisungen funktionieren im Wesentlichen so:

  1. Vorbereiten:Eine SQL-Anweisungsvorlage wird erstellt und an die Datenbank gesendet. Bestimmte Werte bleiben unspezifiziert und werden Parameter genannt (mit „?“ gekennzeichnet). Beispiel:

    INSERT INTO mtTable VALUES(?, ?, ?)

  2. Die Datenbank analysiert, kompiliert und führt eine Abfrageoptimierung für die SQL-Anweisungsvorlage durch und speichert das Ergebnis, ohne es auszuführen

  3. Ausführen:Zu einem späteren Zeitpunkt bindet die Anwendung die Werte an die Parameter, und die Datenbank führt die Anweisung aus. Die Anwendung kann die Anweisung beliebig oft mit unterschiedlichen Werten ausführen

versuchen Sie es mit dem folgenden Code

<?php

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$rowperpage = 3;
$offset     = 0;

// counting total number of posts
$query = "SELECT count(id) AS allcount  FROM posts";
$stmt  = $db->query($query)->fetchColumn();

/******** The ABOVE QUERY LOOKS POINTLESS TO ME AS YOU NOT USING THE RESULTS FROM THAT QUERY*/

// select first 3 posts

$qry = "SELECT * FROM posts ORDER BY id ASC LIMIT ?,? ";
$stm = $db->prepare($qry);
$stm->execute(array($offset,$rowperpage));
$results = $stm->fetchall(PDO::FETCH_ASSOC);

if (count($results) > 0) {

    foreach ($results as $row) {

        $id           = $row['id'];
        $title        = $row['title'];
        $content      = $row['content'];
        $shortcontent = substr($content, 0, 160) . "...";
        $link         = $row['link'];

    }
} else {

    echo "No records found";
}
?>