mysqli选择表连接表2混淆

时间:2014-04-07 13:04:54

标签: php mysqli

我想要做的是:我有桌子 - > members和桌子follow_user。因此,当登录用户访问某个配置文件并单击follow button时,函数INSERT INTO会将loggedin用户的ID和配置文件的ID插入到follow_user表中,直到现在一切正常。但我现在面临的最大困惑是,为当前查看个人资料提取所有followers from database并在当前查看用户的个人资料中显示他们的nameprofilepicid。这是代码我试图用户,但不能超过选择声明:

<?php
include("../secure/functions.php");
$currentid =$_SESSION['user_id'];

if(isset($_GET['id'])){
$viewuser =$_GET['id'];
$stmt = $mysqli->prepare("SELECT * FROM follow_user JOIN members WHERE     follow_user.follow_id = ? OR members.id = ?"); 
    $stmt->bind_param('s', $viewuser); // Bind "$user_id" to parameter.
    $stmt->execute(); // Execute the prepared query.
    $stmt->store_result();
     if($stmt->num_rows == 1) {
     $stmt->bind_result($id,$username,$user_level,$profilepic,$cover); // get    variables from result.
       $stmt->fetch();
}
}

?>

表格结构:

follow_user

column  type           Null Default Comments
fid         int(11)         No       
id          varchar(300)    No       
follow_id   varchar(300)    No 

成员:

column  Type           Null      Default    Comments
id          int(11)     No       
username    varchar(30) No       
email       varchar(50) No       
password    char(128)   No       
salt        char(128)   No       
user_level  varchar(50) No       
profilepic  varchar(200)    No       
cover       varchar(50) No   

2 个答案:

答案 0 :(得分:0)

将连接条件添加到您的查询中:

SELECT * FROM follow_user JOIN members ON members.id = follow_user.fid WHERE ....

答案 1 :(得分:-1)

查询中有两个参数,但您已绑定了一个参数。执行查询时,第二个?为空。只需添加一个新的$stmt->bind_param('s', $viewuser);就是您的解决方案。

或者使用下一个

使这些内容更具可读性
$stmt = $mysqli->prepare("SELECT * FROM follow_user JOIN members WHERE follow_user.follow_id = :followId OR members.id = :memberId"); 
$stmt->bind_param(':followId', $viewuser);
$stmt->bind_param(':memberId', $viewuser);
$stmt->execute(); // Execute the prepared query.

请注意:followId:memberId作为参数。准备好的语句不是为了将一个值绑定到多个参数而构建的。

另外,如果要正确组合表(从开发人员视图),如果存在FK(外键)关系,我建议使用LEFT JOININNER JOIN

相关问题