【问题标题】:Some issue in SQL SELECT , AND , Not Equal to querySQL SELECT , AND , Not Equal to query 中的一些问题
【发布时间】:2013-11-25 23:10:50
【问题描述】:

我写了一个查询

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

使用注册用户的邮政编码获取财产,并且财产可见状态为“y”且财产邮政编码不等于零的条件。

问题是……

如果注册用户访问该页面并且该物业的邮政编码不可用。然后它会显示邮政编码为零且可见性为“n”的属性。

我想要,它不显示邮政编码为“0”和可见性为“n”的房产

【问题讨论】:

  • where $my-zip <> '' 怎么样(或 Null 或其他)
  • $my-zip 存储注册用户邮编

标签: php mysql datatable


【解决方案1】:

由于您已经在比较 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

【讨论】:

  • 有帮助吗?如果是这样,请通过支持我来帮助我;-)
猜你喜欢
  • 2012-11-21
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 2021-11-10
  • 2011-05-09
相关资源
最近更新 更多