【问题标题】:Is this an efficient way to create a post stream, or is there a better way? [duplicate]这是创建帖子流的有效方法,还是有更好的方法? [复制]
【发布时间】:2013-02-23 03:48:21
【问题描述】:
$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);

我一直在尝试创建一个不错的帖子流,但我终于把我的代码写下来了。但是如果你有大量的连接(连接来自朋友、页面或事件),它似乎效率很低。

有人能告诉我是否有更好的方法吗?

--顺便说一句:这已经很完美了,但我觉得我会遇到问题

【问题讨论】:

    标签: php mysql sql pdo while-loop


    【解决方案1】:

    $FSQL = $pdo->query('SELECT * FROMconnectionsWHEREuid="'.$my_id.'" &&type="1" ORDER byidDESC');

    这很容易受到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.
    

    【讨论】:

    • 我知道如何准备值,只是没有必要,因为 $my_id 是由 PHP/SQL 生成的,用户无法更改该值。
    • 使用准备好的语句是查询 SQL 数据库的标准方法。如果我的回答没有太大帮助,我深表歉意,但是当有人在 SQL 查询中连接字符串值时,这对大多数开发人员来说是一个很大的危险信号。
    • 是的,我明白了。这对我来说也是一个很大的危险信号,但就像我说的那样,它不能由用户生成,所以对我来说似乎没什么大不了的。我准备了大部分其他陈述。
    • 是的,这很公平。我的观点是,这是可以理解的,为什么它是第一个让我跳出来的东西。就是这样:)
    【解决方案2】:

    您不想使用子查询? 像这样的...

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

    当你不需要所有字段时,尽量不要使用*。

    【讨论】:

    • 子查询对我不起作用:/
    • 您的语句会将 $my_id 作为字符串文字传递;不是作为变量类型。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2014-01-16
    相关资源
    最近更新 更多