Nasıl mysqli için başlatılmış hazırlanmış deyimi bir leftjoin çalışma kullanarak yok iken?

2 Cevap php

Kullanıcı bir linke tıklayın farklı bir sayfadan bu sayfaya gelir ve bir ?photo_id= ve ardından id numarası ile eklenir. Ben bu sayfaya geldiğinde belli bilgilerin izleyiciye kullanılabilir olmasını istiyorsanız.

Onları fotoğraf, fotoğraf adı ve fotoğrafçılar adını görmek mümkün istiyorum. İlk iki çünkü photo_id, photo_filename, bir sorun değildir, ve photo_title aynı tabloda tüm vardır. Ben sorunlarla karşılaştığınızda kısa sürede photographers adı verilen farklı bir masaya üzerinde bu fotoğraf hakkında bilgi almak için çalışırken, bu.

İşte benim kod:

$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();
}

İlk üç değişken ($photo_id, $photo_title, ve $photo_filename) ince iş ve ben sayfamda onları yankı, ama eklenen diğer değişkenlerin Böyle photographers.photographer_id ve photographers.photographer_name, farklı bir tablo olarak LEFTJOIN, çalışmaz. Bunu bilmek olduğu gibi, sayfa tamamen ben SELECT satırında ekstra sütun adlarını eklerim zaman kırar.

Ben bind_result() işlevi değişkenlerin miktarı ile ilgili bir şey vardır bir his var. Ben onlar SELECT satırında belirtilen sütun sayısıyla eşleşmesi gerektiğini düşünüyorum, ama gerçekten her biri için bir değişken oluşturmak istemiyorum.

Herkes bana yardımcı olabilir misiniz?

2 Cevap

Bahsettiğiniz gibi, altı sütunları seçme ama sadece ilk dört bağlayıcı. Bu sütunların her altı ihtiyacınız yoksa, bunları seçmeyin. Eğer düşündüğün buysa eğer, size katılmadan konum sütunu seçmek için gerekli değildir.

What @BipedalShark said, plus...: since you're doing a LEFT JOIN, it must mean you're prepared for photos whose photographer is unknown or missing from the photographer table (*) -- but in that case the columns you're SELECTing from that table will be NULL. Maybe you want to COALESCE them in your SQL? Or maybe you actually mean INNER JOIN...? Just checking!

(*) Bu ne LEFT JOIN means - bu bir outer Eğer WHERE neticesinde sol tablodan tüm satırları olsun sağlanması, katılmak , eşleşen hiçbir satır sağ tabloda orada bile