2009-06-11 7 views
0

Der Benutzer kommt zu dieser Seite von einer anderen Seite, wo sie auf einen Link klicken und es wird eine ?photo_id= und dann die ID-Nummer angehängt. Ich möchte, dass bestimmte Informationen für den Betrachter verfügbar sind, wenn sie auf dieser Seite ankommen.Wie funktioniert ein leftjoin bei Verwendung einer initialisierten vorbereiteten Anweisung für MySQLI?

Ich möchte, dass sie das Foto, den Foto-Namen und den Namen des Fotografen sehen können. Die ersten beiden sind kein Problem, denn die photo_id, photo_filename und sind alle in der gleichen Tabelle. Sobald ich versuche, Informationen über dieses Foto zu bekommen, das sich auf einem anderen Tisch namens photographers befindet, habe ich Probleme.

Hier ist mein Code:

$sql = 'SELECT photos.photo_id, photos.photo_title, photos.photo_filename, photos.photographer_id, photographers.photographer_id, photographers.photographer_name 
     FROM photos 
     LEFT JOIN photographers ON photos.photographer_id = photographers.photographer_id 
     WHERE photo_id = ?'; 

//initialize prepared statement 
$stmt = $conn->stmt_init(); 
if ($stmt->prepare($sql)) { 
    $stmt->bind_param('i', $_GET['photo_id']); 
    $stmt->bind_result($photo_id, $photo_title, $photo_filename, $photographer_id); 
    $OK = $stmt->execute(); 
    $stmt->fetch(); 
} 

Die ersten drei Variablen ($photo_id, $photo_title und $photo_filename) funktionieren und ich kann sie auf meiner Seite Echo aus, aber die anderen Variablen, die ich aus dem LEFTJOIN so zugegeben, als photographers.photographer_id und photographers.photographer_name, die aus einer anderen Tabelle sind, wird nicht funktionieren. Wie es bekannt ist, bricht die Seite vollständig, wenn ich die zusätzlichen Spaltennamen in der SELECT-Zeile hinzufüge.

Ich habe das Gefühl, es hat etwas mit der Anzahl der Variablen in der bind_result() Funktion. Ich denke, sie müssen die Anzahl der Spalten in der SELECT-Zeile übereinstimmen, aber ich möchte nicht wirklich eine Variable für jede erstellen.

Kann mir jemand helfen?

Antwort

0

Wie Sie bereits erwähnt haben, wählen Sie sechs Spalten aus, binden aber nur die ersten vier. Wenn Sie nicht alle sechs dieser Spalten benötigen, wählen Sie sie nicht aus. Es ist nicht notwendig, die Spalte auszuwählen, der Sie beitreten, wenn Sie das denken.

0

Was @BipedalShark gesagt hat, plus ...: Da Sie eine LEFT JOIN machen, muss es bedeuten, dass Sie für Fotos vorbereitet sind, deren Fotograf unbekannt ist oder aus dem Fotografentisch (*) fehlt - aber darin Wenn die Spalten SELECT von dieser Tabelle sind, wird NULL. Vielleicht möchten Sie COALESCE sie in Ihrem SQL? Oder meinst du eigentlich INNER JOIN ...? Einfach überprüfen!

(*) das ist, was LEFT JOINbedeutet - es ist ein Außen verbinden, sodass Sie alle Zeilen aus der linken Tabelle erhalten, die die WHERE übereinstimmen, auch wenn es in der rechten Tabelle keine passende Zeile ist