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));
}
}
?>