2013-03-07 30 views
0
$FSQL = $pdo->query('SELECT * FROM `connections` WHERE `uid`="'.$my_id.'" && `type`="1" ORDER by `id` DESC'); 
$myfriends = '`uid`="'.$my_id.'" '; 
while($po = $FSQL->fetch(PDO::FETCH_ASSOC)){ 
    $myfriends .= ' || `uid`="'.$po['cid'].'"'; 
} 

$dsk = $pdo->query("SELECT * FROM `posts` WHERE ".$myfriends." ORDER by `id` DESC LIMIT ".$limitCount); 

我一直在试图创建一个不错的发布流,并且我最终得到了我的代码。但是如果你有大量的连接(连接是从朋友,页面或事件中获取的任何东西),它似乎效率很低。这是创建帖子流的有效方式,还是有更好的方法?

有人能告诉我是否有更好的方法来做到这一点?

- 截至方式:这种情况已经可以正常使用,但我觉得我会碰到问题了线

回答

0

$FSQL = $pdo->query('SELECT * FROM连接WHERE UID ="'.$my_id.'" &&="1" ORDER by ID DESC');

这是脆弱的SQL Injection。你应该使用参数和准备好的语句。请参阅Documentation

成功范例

$sql = $pdo->prepare('SELECT * FROM `table` WHERE `uid`=:uid'); 
// Create the SQL statement, with the parameter prefixed by a ":". 
$userID = "username"; 
// Grab the value you wish to bind to your parameter. 
$sql->bindParam(':uid', $userID); 
// Bind the values, using the bindParam method. 
$sql->execute(); 
// Execute the statement with the parameters bound to the SQL query. 
+0

我知道如何准备值,只是没有必要,因为$ my_id是由PHP/SQL生成的,并且用户无法更改该值。 – Jake 2013-03-07 19:26:42

+0

使用预准备语句是查询SQL数据库的标准方法。我很抱歉,如果我的回答没有多大帮助,但是当某人在SQL查询中连接字符串值时,对大多数开发人员来说这是一个大红旗。 – christopher 2013-03-07 19:28:20

+0

是的,我明白了。这对我来说也是一个很大的红旗,但就像我说的那样,不能由用户生成,所以对我来说这似乎不是什么大不了的事情。我准备了我的大部分其他陈述。 – Jake 2013-03-07 19:29:24

0

你不想使用子查询? 事情是这样的......

$dsk = $pdo->query(
    "SELECT * 
     FROM `posts` 
     WHERE uid IN (
      SELECT cid 
       FROM `connections` 
      WHERE `uid`="'.$my_id.'" && `type`="1" 
     ) 
     ORDER BY `id` DESC LIMIT " . $limitCount); 

而且尽量不要使用*当你不需要的所有字段。

+0

子查询不适用于我:/ – Jake 2013-03-07 19:28:17

+0

您的语句会将$ my_id作为字符串文本传递;不是变量类型。 – christopher 2013-03-07 19:29:06

相关问题