【问题标题】:Why my search wont refine?为什么我的搜索不会细化?
【发布时间】:2009-05-29 02:45:08
【问题描述】:

我有这段代码:

//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'

由于某种原因这不起作用,我测试了查询并且它工作正常,但由于某种原因它不能与我编写的代码一起使用。我检查了变量名称的差异,但它们都是一样的......任何人都知道它为什么不起作用!!!

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    我认为你的 AND 之前需要一个空格,否则它将是:

    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 所说的关于使用参数化查询的内容,但我仍然认为上述是问题所在。

    【讨论】:

      【解决方案2】:

      明显的步骤是在运行之前打印完整的查询,然后手动运行它,看看会发生什么。另外,您应该使用prepared statements

      【讨论】:

        【解决方案3】:

        使用调试脚本

        if ($form_member_id != 0) {
                $query .= "AND photos.member_id = '$form_member_id' ";
                die($query);
        }
        

        复制并粘贴查询并在 phymyadmin 等中运行以找出错误的来源

        为了更好的安全性,您可能希望它是这样的

        if ($form_member_id != 0) {
                $query .= "AND photos.member_id = '" . mysql_real_escape_string($form_member_id) . "' ";
        }
        

        【讨论】:

          【解决方案4】:

          如果它现在对您有用,您应该回显该查询以查看问题所在:)

          【讨论】:

            【解决方案5】:

            另一件事,我对 php 没有经验,但您的代码看起来是 SQL 注入攻击的主要目标...

            有人可以为您的“$form_member_id”填充缓冲区并输入类似

            的值

            '; truncate members; '

            其中前导和尾随引号是提交字符串的一部分...第一个';将终止你的字符串,;结束一个语句,然后截断你的表并忽略其余的......

            再次重申,我不是 PHP 人,但许多其他历史安全帖子都在谈论对查询进行参数化以防止此类注入攻击

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-05-17
              • 2012-03-24
              • 2016-10-16
              • 1970-01-01
              • 1970-01-01
              • 2017-09-01
              • 1970-01-01
              相关资源
              最近更新 更多