Beiträge von alfonso

    Bei diesem Skript komme ich einfach nicht weiter!

    Als erstes wird die Datenbank nach 10 zutreffenden ids befragt.
    Dieses Ergebnis wird in das PHP array $zehnids gesteckt.

    Das Problem:
    Im Zweiten Schritt wird dieselbe Tabelle nach weiteren Spalten unter Benutzung der $zehnids-Werte abgefragt.

    Doch die Zweite Abfrage bringt die Fehlermeldung:

    Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous in G:


    Wo ist der Fehler? Oder lässt sich die ganze Abfrage-Technik besser machen?


    Der Grund, warum ich dieses Konstrukt verwende, ist:
    die spalte8 wird am Ende des Skripts (schritt3) hochgezählt, also geändert - wodurch bei der nächsten Abfrage andere
    ids als result gezogen werden. Darum ist es wichtig, immer mit den gleichen ids zu fragen.

    der Problem-Code:

    <html>
    <head>
    <?php
    echo ("<script type=\"text/JavaScript\">");
    $pdo = new PDO('mysql:host=localhost;dbname=db1', 'ichselbst', 'abc');
    // schritt 1: Javascript-array und php-array $zehnids füllen
    $stmt = $pdo->prepare("SELECT `id`, `ar`, `ra` FROM tabelle1 WHERE `kategorie`= ? ORDER BY `gez` ASC LIMIT 10");
    $stmt->execute(array('meinekategorie'));
    $zehnids = array();
    $gespkt = 0;
    while($row = $stmt->fetch())
    {
    $zehnids[] = $row['id']; // 10 zutreffende ids in PHP-array $zehnids speichern
    echo ("ans[" . $row["id"] . "] = \"" . $row["ar"] . "\"; ");
    echo ("pu[" . $row["id"] . "] = " . $row["ra"] . "; ");
    $gespkt = ($gespkt + $row["ra"]); // mögliche Gesamtpunktzahl erzählen
    }
    echo ("</script>\n");
    ?>
    </head>
    <body>

    <?php
    // schritt 2: weitere spalten mit den selben $zehnids holen
    foreach ($zehnids as $einzid)
    {
    echo ("<hr>");
    $stmt = $pdo->prepare("SELECT tabelle1.id, tabelle1.frage, ... , tabelle1.gez, tabelle2.look FROM tabelle1, tabelle2 WHERE (tabelle1.autor = tabelle2.user AND `id`= ?) LIMIT 10");
    stmt->execute(array('$einzid')); // Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous in G:\xampp:57 Stack trace: #0

    while($row = $stmt->fetch())
    {
    echo ("\n<div class=\"sowas\">\n");
    echo("..." . $row["frage"]);
    echo("...</div>");
    //schritt 3: die frage als gezogen vermerken = gezogen hochzählen
    $statement = $pdo->prepare("UPDATE tabelle1 SET gez = ? WHERE id = ?");
    $statement->execute(array($row["gez"]++, $row));
    }

    }
    ?>