首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gid=$gid LIMIT 26在哪里不起作用?

gid=$gid LIMIT 26在哪里不起作用?
EN

Stack Overflow用户
提问于 2011-05-08 18:48:37
回答 2查看 197关注 0票数 0

我可能没有最好的查询在查询去这里,如果有人可以教我一个更好的方法,将不胜感激。

但是对于我所做的,我似乎不能弄清楚为什么限制命令不起作用?

我将缩略图限制在26,但我得到38?

非常奇怪。

如果有用的话,我可以说gallery表有7个已发布的图库,因此将有7个id来自那里,我希望下一个查询将遍历photo表,并返回上面查询的7个图库中具有id的所有照片,对吧?

这就是我的代码,如果有人能理解的话..

代码语言:javascript
复制
<?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 }} ?>  

感谢任何人,可以帮助阐明这一点或建议/教我一个更好的方法。

干杯。约翰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-08 19:06:36

您正在进行多个查询,每个查询都被限制为20个。

取而代之的是,使用联接将查询组合成单个查询。它比循环多个查询更有效,并且您可以对组合结果进行限制:

代码语言:javascript
复制
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的例子吗?

好吧,如果你还在这么做,这是:

代码语言:javascript
复制
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid='$gid' LIMIT 20";

需要对其中的$gid进行转义,否则值中的任何撇号(或可能的反斜杠)都会导致值爆炸。

代码语言:javascript
复制
$query2 = "SELECT id,uid,gid,image,origimage FROM photo WHERE gid='".mysql_real_escape_string($gid)."' LIMIT 20";

然后:

代码语言:javascript
复制
href="public-photo-user.html?uid=<?php echo $row2['uid']; ?>...

如果URL值包含双引号,将会受到攻击,并且对于其他不能放入uid的分类字符也会失败。

您可能可以确保您的ID永远不会包含标点符号,但任何其他值都可能包含标点符号,因此,当您将文本字符串插入到另一个上下文(如SQL、HTML或URL )中时,最好始终使用适当的编码。

不过,总是键入mysql_real_escape_stringhtmlspecialchars有点乏味,所以我倾向于定义如下快捷函数:

代码语言:javascript
复制
function m($str) { return "'".mysql_real_escape_string($str)."'"; }
function h($str) { echo htmlspecialchars($str); }
function u($str) { echo rawurlencode($str); }

它的用法如下:

代码语言:javascript
复制
$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']); ?>&amp;gid=<?php u($row2['gid']); ?>&amp;id=<?php u($row2['id']); ?>">

(还要注意,为了保证&的有效性和可靠性,属性值中的&amp;应该转义为HTML。)

票数 2
EN

Stack Overflow用户

发布于 2011-05-08 18:53:36

您有多个status为1的库,因此将不止一次地遍历内部循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5926969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档