我有这段代码:
//Restrict the SQL query with an AND clause if a member has been selected
if ($form_member_id != 0) {
$query .= "AND photos.member_id = '$form_member_id' ";
}
这意味着将搜索查询细化为仅选定的用户,因此整个查询一起读取:
SELECT
photos.photo_id, members.member_name, photos.photo_title, photos.photo_film, photos.photo_height, photos.photo_width
FROM members, photos
WHERE members.member_id = photos.member_id
AND photos.member_id = '$form_member_id'
由于某些原因,这不起作用,我测试了查询,它工作正常,但由于某种原因,它不会使用我写的代码。我已经检查了变量名称的差异,但它们都是一样的....任何人都知道为什么它不起作用!!!
答案 0 :(得分:3)
我认为在你之前你需要一个空格,否则它会是:
WHERE members.member_id = photos.member_idAND photos.member_id = '$form_member_id'
而不是
WHERE members.member_id = photos.member_id AND photos.member_id = '$form_member_id'
同上 @Matthew关于使用参数化查询的内容,但我仍然认为以上是问题。
答案 1 :(得分:0)
明显的一步是在运行之前打印完整的查询,然后手动运行它,看看会发生什么。此外,您应该使用prepared statements。
答案 2 :(得分:0)
另外一件事,我对php没有经验,但你的代码看起来是SQL注入攻击的主要目标......
有人可以填充“$form_member_id
”的缓冲区并输入类似
'; truncate members; '
其中前导和尾随引用是提交的字符串的一部分......第一个';将终止你的字符串;结束一个语句,然后截断你的表并忽略其余的...
同样,我不是一个PHP人员,但是许多其他历史安全帖子都谈到了对你的查询进行PARAMETERIZIZ以防止这种注入攻击
答案 3 :(得分:0)
使用
调试脚本if ($form_member_id != 0) {
$query .= "AND photos.member_id = '$form_member_id' ";
die($query);
}
复制并粘贴查询并在phymyadmin等中运行以找出bug的来源
为了更好的安全性,您可能希望它像这样
if ($form_member_id != 0) {
$query .= "AND photos.member_id = '" . mysql_real_escape_string($form_member_id) . "' ";
}
答案 4 :(得分:0)
如果查询现在正在为您查看看起来是什么问题,您应该回显查询:)