Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

DB mit array-Werten befragen klappt nicht

Sie befinden sich: Home > Forum > Mysql > DB mit...

Wenn Sie einen Beitrag in diesem Forum schreiben möchten, so ist es erforderlich, dass Sie ein
 Benutzerkonto registrieren.

In diesen Beitrag wurden 3 Nachrichten geschrieben.

DB mit array-Werten befragen klappt nicht
Nachricht wurde verfasst am 25.09.2025 um 16:16 Uhr von   SUMbea
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:

<?php
<html>
<head>

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>


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

}​
?>
 
Nachricht wurde verfasst am 11.10.2025 um 08:44 Uhr von Schubertmedia Schubertmedia
Aha, der Klassiker. "Column 'id' is ambiguous" - das klingt erst mal kryptisch, ist aber ganz einfach.

Das heißt: In deiner SQL-Abfrage gibt es zwei Spalten mit dem Namen id,
eine aus tabelle1 und eine aus tabelle2.

MySQL weiß also nicht, welche id du meinst.

Hier ist dein Fehler:

WHERE (tabelle1.autor = tabelle2.user AND `id` = ?)


Da musst du klar sagen, von welcher Tabelle die ID stammt.
So:

WHERE (tabelle1.autor = tabelle2.user AND tabelle1.id = ?)


Damit weiß MySQL Bescheid, und der Fehler ist weg.

Aber noch was: Dein Code lässt sich deutlich sauberer schreiben.
Du brauchst nicht für jede ID eine neue Abfrage zu machen.
Das ist langsam und unübersichtlich.

Statt foreach kannst du alle IDs in einem Rutsch holen.

Zum Beispiel so:


<?php
$placeholders = str_repeat('?,', count($zehnids) - 1) . '?';
$sql = "SELECT t1.id, t1.frage, t1.gez, t2.look
FROM tabelle1 t1
JOIN tabelle2 t2 ON t1.autor = t2.user
WHERE t1.id IN ($placeholders)";
$stmt = $pdo->prepare($sql);
$stmt->execute($zehnids);
?>



Dann bekommst du alle passenden Zeilen auf einmal, ohne die Schleife mit zig einzelnen Abfragen.

Und noch ein kleiner Hinweis:
Du schreibst in deiner zweiten Abfrage:


<?php
$stmt->execute(array('$einzid'));
?>



Das ist falsch. Die Variable wird als String behandelt, weil du sie in Anführungszeichen setzt.

Richtig ist:


<?php
$stmt->execute(array($einzid));
?>


Viele Grüße
Nico
Nachricht wurde verfasst am 14.10.2025 um 09:36 Uhr von   SUMbea
Vielen Dank!
Das ist die beste Erklärung seit langem!
   Antwort schreiben



Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.