0

用户从一个不同的页面来到这个页面,他们点击一个链接,?photo_id=然后附加一个 id 编号。我希望查看者到达此页面时可以使用某些信息。

我希望他们能够看到照片、照片名称和摄影师姓名。前两个不是问题,因为photo_id,photo_filenamephoto_title都在同一个表中。一旦我尝试获取有关这张照片的信息,该信息位于另一个名为 的表格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();
}

前三个变量($photo_id$photo_title$photo_filename)工作正常,我可以在我的页面上回显它们,但我从 LEFTJOIN 添加的其他变量(例如来自不同表的photographers.photographer_idphotographers.photographer_name)将不起作用。众所周知,当我在 SELECT 行上添加额外的列名时,页面完全中断。

我感觉它与bind_result()函数中的变量数量有关。我认为他们需要匹配 SELECT 行中提到的列数,但我真的不想为每个列创建一个变量。

有人可以帮帮我吗?

4

2 回答 2

0

就像您提到的那样,您选择了六列,但只绑定前四列。如果您不需要所有这六列,请不要选择它们。如果这是您的想法,则无需选择您要加入的列。

于 2009-06-11T02:02:50.930 回答
0

@BipedalShark 所说的,加上...:既然你在做 a LEFT JOIN,这一定意味着你已经准备好拍摄摄影师未知或从摄影师表中丢失的照片(*)——但在这种情况下,你的列SELECT从那张桌子上 ing 将是NULL. 也许你想COALESCE在你的 SQL 中使用它们?或者,也许你真的是说INNER JOIN……?只是检查!

(*) 这就是LEFT JOIN 意思- 它是一个连接,确保您从左表中获取与 匹配的所有行WHERE,即使右表中没有匹配的行

于 2009-06-11T02:15:50.733 回答