Вы делаете несколько запросов, каждый из которых индивидуально ограничен 20.
Вместо этого объедините запросы в один запрос, используя соединение. Это более эффективно, чем зацикливание нескольких запросов, и вы можете ограничить объединенные результаты:
SELECT photo.id, photo.uid, photo.gid, photo.image, photo.origimage
FROM photo JOIN gallery ON gallery.id=photo.gid
WHERE gallery.status=1
LIMIT 20
Вы также всегда должны быть осторожны при использовании mysql_real_escape_string()
при помещении значений в строки запроса, иначе вы получите дыры в безопасности SQL-инъекций. Точно так же весь текст, который вы выводите на страницу HTML, должен быть закодирован с использованием htmlspecialchars()
, чтобы избежать внедрения разметки, а данные, вставленные в часть URL, должны быть закодированы с помощью rawurlencode()
.
ETA:
Можете ли вы связать меня с примером mysql_real_escape_string в сочетании с htmlspecialchars.
Ну, если вы все еще это делаете, это:
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid='$gid' LIMIT 20";
Требуется экранирование $gid
, иначе любой апостроф (или потенциально обратный слеш) в значении может привести к его взрыву.
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid='".mysql_real_escape_string($gid)."' LIMIT 20";
Тогда:
href="public-photo-user.html?uid=<?php echo $row2['uid']; ?>...
будет уязвимым, если значение uid
содержит двойные кавычки, а также не будет работать для других различных символов, которые недопустимы для вставки в URL.
Возможно, вы можете быть уверены, что ваши идентификаторы никогда не содержат знаков препинания, но могут использоваться любые другие значения, поэтому лучше всегда использовать соответствующую кодировку всякий раз, когда вы вставляете строку текста в другой контекст, такой как SQL, HTML или URL.
Набирать mysql_real_escape_string
и htmlspecialchars
все время немного утомительно, поэтому я склонен определять функции быстрого доступа, такие как:
function m($str) { return "'".mysql_real_escape_string($str)."'"; }
function h($str) { echo htmlspecialchars($str); }
function u($str) { echo rawurlencode($str); }
Который можно использовать как:
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid=".m($gid)." LIMIT 20";
Hello, <?php h($name); ?>
<a class="featureGrid" href="public-photo-user.html?uid=<?php u($row2['uid']); ?>&gid=<?php u($row2['gid']); ?>&id=<?php u($row2['id']); ?>">
(обратите внимание также &
в значении атрибута должно быть экранировано до &
для достоверности и надежности HTML.)