选择带变量的语句,但不起作用

时间:2011-09-30 14:25:32

标签: php mysql

我尝试选择带变量的语句,但不行,也许我会错过一些东西。

<!--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-->

我尝试从

改变
where id='$get_id_friend'"); 

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

但仍无效 抱歉,我还是新手

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

2 个答案:

答案 0 :(得分:0)

我建议您阅读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

这样,一个表包含所有用户信息,第二个表包含所有“朋友”数据。访问此信息的正确方法是使用预准备语句,然后您可以遍历生成的数组,即:以下内容:

$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的东西)做一些研究,你应该有一个良好的开端

我希望这会对你有所帮助。

答案 1 :(得分:-1)

从语法上讲,构建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_names。现在,您已将代码缩减为:

$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 ...
}

一个循环,一个查询,少一些麻烦和muss。