选择带有变量的语句,但不能工作


Select statement with variables, but not work

我尝试选择语句与变量,但不工作,也许我错过了一些东西。

<!--Get data from user--> 
    <?php while ($row_settings = mysql_fetch_array($rs_settings4)) {
            $get_id_friend=$row_settings['friend_id'];
    } ?>
<!--Get data from user--> 

  <div id="wrap-box"><!--Loop-box-->
<?php $results  = mysql_query("select * from users where id='$get_id_friend'");  ?>  
  <?php while ($row_friend_loop = mysql_fetch_array($results)) {?>
        <div class="img">
            <img src="<?php echo $row_friend_loop['img']; ?>" width="49"/>
        </div>
        <div id="request">
            <div class="name">
            <p><?php echo $row_friend_loop['user_name']; ?></p>
            </div>
            <div class="btn">
            <a href="#"><img src="images/btn-confirm.jpg" class="hover" /></a><a href="#">
            <img src="images/btn-ignore.jpg" class="hover" /></a>
            <div class="clear"></div>
            </div>
        </div>
       <?php } ?><!--Loop-box-->

i try from

where id='$get_id_friend'"); 

where id='.$get_id_friend.'"); 

但仍然不能工作,对不起,我还是新手

首先我想从表友中获取id,如果从表友中获取id与表用户相关,那么所有与相关id相关的数据将被循环。

我建议你仔细阅读sql注入和PDO库。另外,我有一种感觉,你没有一个非常有效的数据库结构。

我只是猜测你的动机和数据库,但你应该这样开始:

TABLE friends
int id PRIMARY
int user_id
int friend_id
TABLE users
int user_id
VARCHAR(64) img
VARCHAR(24) user_name

这样,一个表保存所有的用户信息,第二个表保存所有的'friend'数据。访问这些信息的正确方法是使用准备好的语句,然后你可以遍历结果数组,例如:

$sql = "SELECT 
           friends.friend_id AS friend_id,
           users.img AS friend_img,
           users.user_name AS friend_user_name,
        FROM friends
        LEFT JOIN users ON (friend.user_id = users.user_id)
        WHERE friend.user_id = :user_id";
$sth = PDO->prepare($q);
$sth->bindParam(":user_id",$user_id_to_get_friends_for);
try{
     $sth->execute();
     $friends = $sth->fetchAll();
} catch (PDOException $e) {
     //  Do something with the error
}
// Now loop through the array
foreach($friends as $f) {
     echo "<td><img src='".$f['friend_img']."' alt='' />".$f['friend_user_name']."</td>";
}

现在,我敢肯定这是过度简化了,但是如果你遵循这种格式,并对我在这里使用的函数(即LEFT JOIN和PDO的东西)做一点研究,你应该有一个良好的开端。

我希望这对你有帮助。

从语法上讲,构建where子句的两个版本的工作方式绝对没有区别-如果都不工作,则$get_id_friend没有正确设置。这两个查询都没有任何错误处理,并且不显示初始查询的查询字符串,只显示如何从中获取数据。

一个适当的极简"安全"查询结构是:

$sql = "SELECT ...";
$result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error . "<br />$sql");
}

由于您的最后一个评论表明您正在循环多个用户记录并显示这些用户的数据,因此您最好使用单个连接查询,而不是使用导致重复内部查询的"外部"查询。

像这样:

SELECT friends.img, friends.user_name
FROM users AS friends
LEFT JOIN users ON users.friend_id = users.id
WHERE users = $userID;

这只是一个猜测,因为我们对你的表结构知之甚少。但基本上:给定一些userID,获取他们所有朋友的图像和user_name。现在您已经将代码简化为:

$sql = "select query from above";
$result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error() . "<br />$sql");
}
while($row = mysql_fetch_assoc($result)) {
    ... your html stuff as before ...
}

一个循环,一个查询,少麻烦。

相关文章: