0

ユーザーは別のページからこのページにアクセスし、そこでリンクをクリックする?photo_id=と、ID 番号が追加されます。閲覧者がこのページに到達したときに、特定の情報を利用できるようにしたいと考えています。

写真、写真の名前、写真家の名前を表示できるようにしたいです。photo_idphoto_filename、およびphoto_titleがすべて同じテーブルにあるため、最初の 2 つは問題ではありません。という別のテーブルにあるこの写真に関する情報を取得しようとするとすぐに、photographers問題が発生します。

これが私のコードです:

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

最初の 3 つの変数 ( $photo_id$photo_title、および) は正常に機能し、それらを自分のページに表示できますが、別のテーブルのや$photo_filenameなどの LEFTJOIN から追加した他の変数は機能しません。ご存知のように、SELECT 行に余分な列名を追加すると、ページが完全に壊れてしまいます。photographers.photographer_idphotographers.photographer_name

関数内の変数の量に何か関係があると感じていbind_result()ます。SELECT 行に記載されている列の数と一致する必要があると思いますが、それぞれに変数を作成したくありません。

誰でも私を助けることができますか?

4

2 に答える 2

0

@BipedalShark が言ったことに加えて...: を行っているのでLEFT JOIN、写真家が不明であるか、写真家のテーブルから欠落している写真の準備ができていることを意味する必要があります (*)-しかし、その場合、あなたがしている列SELECTそのテーブルからの ing は になりますNULL。多分あなたCOALESCEはあなたのSQLでそれらをしたいですか?それとも、あなたが実際に意味するのはINNER JOIN...?チェックしてるだけ!

(*) つまり、これはLEFT JOIN 外部結合WHEREであり、右側のテーブルに一致する行がない場合でも、 に一致する左側のテーブルからすべての行を確実に取得します。

于 2009-06-11T02:15:50.733 に答える
0

あなたが述べたように、6 つの列を選択していますが、最初の 4 つだけをバインドしています。これらの 6 つの列すべてが必要ない場合は、選択しないでください。参加する列を選択する必要はありません。

于 2009-06-11T02:02:50.930 に答える