SQL SELECT,AND,Not Equal to query中的一些问题

时间:2013-11-25 23:10:51

标签: php mysql datatable

我写了一个查询

SELECT * 
FROM property_list 
WHERE property_zip=$my-zip 
      && property_visible='y' 
      && property_zip!=0  

使用注册的用户邮政编码获取属性,并且具有属性可见状态为“y”且属性zip值不等于零的条件。

问题是......

如果注册用户访问该页面,并且该邮件的邮政编码不可用。然后它显示邮政编码零和&能见度'n'。

我想,它不会显示带有邮政编码'0'&能见度'n'

1 个答案:

答案 0 :(得分:0)

由于您已经在比较property_zip值,因此无需检查它是否为0. PHP代码应该对其进行过滤,因为如果没有ZIP,则不需要执行(或准备)查询代码,对吧?

$ my-zip在变量名中有一个短划线,在PHP中是不允许的。尝试将其称为$ myZip,$ my_zip或类似的东西。

如果依赖于用户输入,则始终转义SQL查询中的任何变量。必须从SQL injection保护您的网站。

另外,如果您正在检查字符串(我认为通常应该使用邮政编码),则必须将该部分查询放在引号中。

总而言之,我认为您正在寻找的代码如下所示:

// Check if the ZIP code isn't 0
if(!$myZip) {
    throw new Exception("Invalid ZIP code entered");
}

// Building a query, quoting in single quotes and escaping the value $myZip
$zipCodeQuery = "
    SELECT * 
    FROM property_list 
    WHERE property_zip = '".mysql_real_escape_string($myZip)."'
        AND property_visible = 'y'
";

// Execute query here

如果这不能解决问题,则问题可能出在周围的代码或输入的邮政编码中。

注意:防止SQL注入的更好方法是使用预准备语句。使用'mysqli'的一个很好的例子可以在这里找到:mysqli::prepare