Wenn ich
WHERE (tabelle1.autor = tabelle2.user AND `tabelle1.id`= ?) schreibe, kommt ein ähnlicher Fehler:
// Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tabelle1.id' in 'where clause' in G:\xampp\
Wenn ich
WHERE (tabelle1.autor = tabelle2.user AND `tabelle1.id`= ?) schreibe, kommt ein ähnlicher Fehler:
// Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tabelle1.id' in 'where clause' in G:\xampp\
Du meinst das FROM tabelle1, tabelle2 ? Tut mir leid. Das ist es nicht.
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));
}
}
?>
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.