2011-09-30 78 views
0

我尝试选择语句与变量,但不工作,也许我想念的东西。选择变量语句,但不工作

<!--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的所有数据都将会循环。

+5

你不能发布一堆代码,并说它不起作用,你必须详细解释你想实现的目标。 – stivlo

+0

在你的第一个while循环中,你每次都会覆盖$ get_id_friend,可能是这样吗?另外,如果ID是数字型的,那么检查一下(intval($ get_id_friend),例如。) –

+2

最有可能的问题是第二个查询在while循环之外,其中定义了$ get_id_friend,所以它只执行$ get_id_friend的最后一个值。但是请定义“不工作”, - 预期是什么,实际产出是多少? –

回答

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的东西)进行一些研究,那么您应该有一个良好的开端。

我希望这可以帮助你。

+0

感谢所有...你真的帮助我..我要去新的世界.. – ruslyrossi

+0

我很难理解“JOIN声明”,我仍然是初学者,顺便提一下,这是很好的方向。 – ruslyrossi

+1

@ruslyrossi没问题!我们都在学习,我很高兴能够提供帮助。 “JOIN”函数实质上是将两个或多个表格连接在一起的公共元素上。例如,我们在这里说(以人为条件)“无论用户标识符在表格之间匹配哪个位置,都可以与用户进行交流”。这样,查询实际上会返回一个由两个“连接”表创建的数据集。在更复杂的查询中,您可能会将许多不同的表连接在一起,最终会得到一张仅包含所需信息的表。 –

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

这只是一种猜测,因为我们对你的表结构的信息非常少。但基本上:给定一些用户ID,获取他们所有朋友的图像和用户名。现在,您已将代码缩减为:

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

一个循环,一个查询,不那么大惊小怪。

+0

哇..我今天学习的东西..谢谢..可能我需要更多的练习和练习 – ruslyrossi

+0

此代码'$ sql =“SELECT ...”; $ result = mysql_query($ sql); if($ result === FALSE){(error_info。“
$ sql”); }'在测试时很好,但是会让你对黑客开放,因为你刚刚列出了所有世界的确切查询以查看是否发生错误; **不要在生产**中使用这样的代码** – Johan

+0

-1不引用注入的$变量。如果该ID不能保证为数字,这会使您无法使用SQL注入和语法错误。 OP中没有任何地方或者你的代码是强制执行的。 – Johan