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

私は素敵な投稿ストリームを作成しようとしてきましたが、ついにコードを停止しました。ただし、接続が大量にある場合(接続は友人、ページ、またはイベントからのもの)、非常に非効率に見えます。

これを行うためのより良い方法があるかどうか誰かに教えてもらえますか?

-ちなみに、これはすでに完全に機能していますが、今後問題が発生するように感じます

4

2 に答える 2

0

$FSQL = $pdo->query('SELECT * FROM接続WHEREuid="'.$my_id.'" &&タイプ="1" ORDER byIDDESC');

これは、 SQL インジェクションに対して脆弱です。パラメータと準備済みステートメントを使用する必要があります。ドキュメントを参照してください。

実施例

$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.
于 2013-03-07T19:21:44.137 に答える
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);

*また、すべてのフィールドが必要ない場合は使用しないようにしてください。

于 2013-03-07T19:24:47.693 に答える