2013-03-07 5 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); 

Я пытался создать хороший поток сообщений, и я, наконец, получил свой код. Но это кажется неэффективным, если у вас есть большое количество подключений (соединения - это что-то из друзей, страниц или событий).Это эффективный способ создания потока сообщений, или есть лучший способ?

Может ли кто-нибудь сказать мне, есть ли лучший способ сделать это?

--by пути: это работает отлично уже, но я чувствую, что я буду столкнуться с проблемами вниз линию

ответ

0

$FSQL = $pdo->query('SELECT * FROM соединений WHERE UID ="'.$my_id.'" && типа ="1" ORDER by идентификатор 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

+0

Использование подготовленных операторов - это стандартный метод для запроса базы данных SQL. Приносим извинения, если мой ответ не очень помогает, но когда кто-то объединяет строковые значения в SQL-запросе, это большой флаг для большинства разработчиков. – christopher

+0

Да, я это понимаю. Для меня это тоже большой красный флаг, но, как я уже сказал, это не может быть создано пользователем, поэтому для меня это не похоже. Я готовлю большинство своих других заявлений. – Jake

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

subquery не работает для меня:/ – Jake

+0

Ваше утверждение передало бы $ my_id как строковый литерал; а не как тип переменной. – christopher

Смежные вопросы