我可能没有最好的查询在查询去这里,如果有人可以教我一个更好的方法,将不胜感激。
但是对于我所做的,我似乎不能弄清楚为什么限制命令不起作用?
我将缩略图限制在26,但我得到38?
非常奇怪。
如果有用的话,我可以说gallery表有7个已发布的图库,因此将有7个id来自那里,我希望下一个查询将遍历photo表,并返回上面查询的7个图库中具有id的所有照片,对吧?
这就是我的代码,如果有人能理解的话..
<?php
// Check if gallery is published
$query1 = "SELECT id,status FROM gallery WHERE status=1";
$result1 = mysql_query($query1) or die(mysql_error());
while($row1 = mysql_fetch_array( $result1 )) {
$gid = $row1['id'];
// now get the photo file names based on the above published gallery ids
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid='$gid' LIMIT 20";
$result2 = mysql_query($query2) or die(mysql_error());
while($row2 = mysql_fetch_array( $result2 )) {
?>
<div style="float:left;">
<a class="featureGrid" href="public-photo-user.html?uid=<?php echo $row2['uid']; ?>&gid=<?php echo $row2['gid']; ?>&id=<?php echo $row2['id'];?>">
<img src="media/users/croppedthumbs/<?php echo $row2['uid']; ?>/<?php echo $row2['gid'] ?>/<?php echo $row2['image']; ?>" />
</a>
</div>
<?php }} ?> 感谢任何人,可以帮助阐明这一点或建议/教我一个更好的方法。
干杯。约翰
发布于 2011-05-08 19:06:36
您正在进行多个查询,每个查询都被限制为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()编码。
预计到达时间:
你能给我链接一个结合了htmlspecialchars的mysql_real_escape_string的例子吗?
好吧,如果你还在这么做,这是:
$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']; ?>...如果URL值包含双引号,将会受到攻击,并且对于其他不能放入uid的分类字符也会失败。
您可能可以确保您的ID永远不会包含标点符号,但任何其他值都可能包含标点符号,因此,当您将文本字符串插入到另一个上下文(如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。)
发布于 2011-05-08 18:53:36
您有多个status为1的库,因此将不止一次地遍历内部循环。
https://stackoverflow.com/questions/5926969
复制相似问题