Wie kann ich ein PDO-Objekt für eine parametrisierte SELECT-Abfrage ordnungsgemäß verwenden

Ich habe versucht, den statementen von PHP.net zu folgen, um SELECT Abfragen auszuführen, aber ich bin nicht sicher, der beste Weg, dies zu tun.

Ich möchte, wenn möglich, eine parametrisierte SELECT Abfrage verwenden, um die ID in einer Tabelle zurückzugeben, in der das Namensfeld mit dem Parameter übereinstimmt. Dies sollte eine ID da sie eindeutig sein wird.

Ich möchte dann diese ID für eine INSERT in eine andere Tabelle verwenden, also muss ich feststellen, ob es erfolgreich war oder nicht.

Ich lese auch, dass Sie die Anfragen für die Wiederverwendung vorbereiten können, aber ich war mir nicht sicher, wie das hilft.

    Sie wählen Daten wie folgt aus:

     $db = new PDO("..."); $statement = $db->prepare("select id from some_table where name = :name"); $statement->execute(array(':name' => "Jimbo")); $row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator 

    Sie fügen auf die gleiche Weise ein:

     $statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)"); $statement->execute(array(':some_id' => $row['id'])); 

    Ich empfehle Ihnen, PDO so zu konfigurieren, dass bei einem Fehler Ausnahmen ausgetriggers werden. Sie würden dann eine PDOException wenn eine der Abfragen fehlschlägt – Sie müssen das nicht explizit überprüfen. Um Ausnahmen zu aktivieren, rufen Sie dies direkt nach dem Erstellen des $db Objekts auf:

     $db = new PDO("..."); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    Ich habe in letzter Zeit mit PDO gearbeitet und die obige Antwort ist völlig richtig, aber ich wollte nur dokumentieren, dass das Folgende auch funktioniert.

     $nametosearch = "Tobias"; $conn = new PDO("server", "username", "password"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name"); $sth->bindParam(':name', $nametosearch); // Or sth->bindParam(':name', $_POST['namefromform']); depending on application $sth->execute(); 

    Sie können die Methoden bindParam oder bindValue verwenden, um Ihre statement vorzubereiten. Es macht die Dinge auf den ersten Blick klarer, anstatt $check->execute(array(':name' => $name)); Vor allem, wenn Sie mehrere Werte / Variablen binden.

    Überprüfen Sie das folgende, klare und leicht zu lesende Beispiel:

     $q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname LIMIT 1"); $q->bindValue(':forename', 'Joe'); $q->bindValue(':surname', 'Bloggs'); $q->execute(); if ($q->rowCount() > 0){ $check = $q->fetch(PDO::FETCH_ASSOC); $row_id = $check['id']; // do something } 

    Wenn Sie mehrere Zeilen erwarten, entfernen Sie LIMIT 1 und ändern Sie die Methode fetch in fetchAll :

     $q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname");// removed limit 1 $q->bindValue(':forename', 'Joe'); $q->bindValue(':surname', 'Bloggs'); $q->execute(); if ($q->rowCount() > 0){ $check = $q->fetchAll(PDO::FETCH_ASSOC); //$check will now hold an array of returned rows. //let's say we need the second result, ie index of 1 $row_id = $check[1]['id']; // do something } 

    Eine kleine, vollständige Antwort ist hier mit allen gebrauchsfertig:

      $sql = "SELECT `username` FROM `users` WHERE `id` = :id"; $q = $dbh->prepare($sql); $q->execute(array(':id' => "4")); $done= $q->fetch(); echo $done[0]; 

    Hier ist $dbh PDO db connecter, und basierend auf der id von Tabellenbenutzern erhalten wir den username mit fetch();

    Ich hoffe, dass dies jemandem hilft, Viel Spaß!

    Methode 1: Verwenden Sie PDO-Abfrage-Methode

     $stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    Zeilenanzahl erhalten

     $stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"'); $row_count = $stmt->rowCount(); echo $row_count.' rows selected'; 

    Methode 2: statementen mit Parametern

     $stmt = $db->prepare("SELECT id FROM Employee WHERE name=?"); $stmt->execute(array($name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    Methode 3: Bindungsparameter

     $stmt = $db->prepare("SELECT id FROM Employee WHERE name=?"); $stmt->bindValue(1, $name, PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); **bind with named parameters** $stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); or $stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name"); $stmt->execute(array(':name' => $name)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

    Möchten Sie mehr wissen, schauen Sie sich diesen Link an

    Wenn Sie die Inline-Codierung in einer einzelnen Seite verwenden und keine Oops verwenden, als mit diesem vollständigen Beispiel zu gehen, wird es sicher helfen

     //connect to the db $dbh = new PDO('mysql:host=localhost;dbname=mydb', dbuser, dbpw); //build the query $query="SELECT field1, field2 FROM ubertable WHERE field1 > 6969"; //execute the query $data = $dbh->query($query); //convert result resource to array $result = $data->fetchAll(PDO::FETCH_ASSOC); //view the entire array (for testing) print_r($result); //display array elements foreach($result as $output) { echo output[field1] . " " . output[field1] . "
    "; }

    genau nach der Linie für die Vorbereitungslinie den Code unten hinzufügen

     echo $statement->queryString;