Php Select语句带有变量,但不起作用

Php Select语句带有变量,但不起作用,php,mysql,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="w

我尝试选择带有变量的语句,但不工作,可能会遗漏一些内容

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

但还是不行,, 对不起,我还是新手


首先,我想从table friend获取id,如果table friend的id与table user相关,则所有id相关的数据都将被循环。

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

适当的最低限度“安全”查询结构是:

$sql = "SELECT ...";
$result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error . "<br />$sql");
}
这只是一个猜测,因为我们对您的表结构知之甚少。但是基本上:给定一些用户名,获取他们所有朋友的图片和用户名。现在,您已将代码缩减为:

$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 ...
}
$sql=“从上面选择查询”;
$result=mysql\u查询($sql);
如果($result==FALSE){
die(mysql_error().“
$sql”); } while($row=mysql\u fetch\u assoc($result)){ …您的html内容与以前一样。。。 }

一个循环,一个查询,更少的麻烦和混乱。

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

我只是在猜测你的动机和数据库,但你应该从以下内容开始:

SELECT friends.img, friends.user_name
FROM users AS friends
LEFT JOIN users ON users.friend_id = users.id
WHERE users = $userID;
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>";
}
$sql=“选择
friends.friend\u id作为friend\u id,
users.img作为朋友\u img,
users.user\u name作为朋友\u用户名,
来自朋友
在上左键加入用户(friend.user\u id=users.user\u id)
其中friend.user\u id=:user\u id”;
$sth=PDO->prepare($q);
$sth->bindParam(“:user\u id”,$user\u id\u to\u get\u friends\u for”);
试一试{
$sth->execute();
$friends=$sth->fetchAll();
}捕获(PDO$e){
//对这个错误做点什么
}
//现在循环遍历数组
foreach($f为好友){
回显“$f['friend\u user\u name']”;
}
现在,我相信这是过于简单了,但是如果你遵循这种格式,对我在这里使用的函数做一些研究(即左连接和PDO的东西),你应该有一个好的开始


我希望这对你有帮助

你不能发布一堆代码然后说它不起作用,你必须详细解释你想要实现什么。在你的第一个while循环中,你在每个段落中都覆盖$get\u id\u friend,可能是这样吗?另外,如果ID是数字的,则检查该值(intval($get\u ID\u friend),例如.ex。)最有可能的问题是第二个查询在while循环之外,在while循环中定义了$get\u ID\u friend,因此它只对$get\u ID\u friend的最后一个值执行。但是请定义“不工作”,什么是预期的,什么是实际的输出?好的。我想从表用户那里获取数据,并循环id$get_id_friend'中的所有数据,这将循环所有数据。哦..正确的@Darhazer第一个循环是问题..我应该关闭底部的标记。哇..我今天学到了一些东西..谢谢..也许我需要更多的实践和练习此代码
$sql=“SELECT…”$result=mysql\u查询($sql);如果($result==FALSE){die(mysql_error.“
$sql”);}
在测试时没有问题,但会让您面临黑客攻击,因为您刚刚列出了您的确切查询,供全世界查看是否发生错误;决不要在production-1中使用这样的代码来不引用注入的$vars。如果不能保证id是数字的,那么这会导致SQL注入和语法错误。OP或您的代码中没有强制执行此操作的地方。我很难理解“JOIN语句”。我还是初学者,顺便说一句,这是一个很好的方向。@ruslyrossi没问题!我们都在学习,我很高兴能帮上忙。“连接”功能实质上是将公共元素上的两个或多个表“连接”在一起。例如,我们在这里说(用人类的术语)“只要用户id在表之间匹配,就可以与用户加入好友”。这样,查询实际上返回一个从两个“联接”表创建的数据集。在更复杂的查询中,您可能会将许多不同的表“连接”在一起,最终得到一个只包含所需信息的表。
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>";
}