【问题标题】:PHP/MySQL SELECT statement with 'variable' <> ' ' or 'variable' IS NOT NULL not working带有“变量”<>“”或“变量”的 PHP/MySQL SELECT 语句不为空不工作
【发布时间】:2013-10-03 05:01:15
【问题描述】:

我编写了一个 SQL 例程,将用户的输入与表中的现有值进行比较。如果该值存在,则输入旁边会出现一个绿色复选标记。如果没有,则会出现一个红色的 x。我的SQL语句如下:

      $check = $con->prepare("SELECT count(*) FROM emaillist");
      $check->execute();
      $result = $check->fetchColumn(); //Get no. of columns
      $check = $con->prepare("SELECT Username FROM emaillist WHERE Username =                                                                                                                                                                                                                               
              '$Name' AND '$Name' <> '' ");
      $check->execute();
      $result = $check->fetchColumn(); //Get exact column
      if(!$result) {
               show red x } else { show green check }

只要有输入就可以正常工作。输入不匹配时出现红色 x,匹配时出现绿色检查;但是,如果该字段留空,我不希望 anything 显示。现在,如果该字段为空或为空,则会出现红色 x。使用 IS NOT NULL 也不起作用。我错过了什么?

【问题讨论】:

  • 如果 $Name 来自用户输入,那么我认为最好独立于 SQL 查询检查其有效性,而不是将其放入查询本身。

标签: php mysql sql


【解决方案1】:

你只有两个分支:显示红色 x 和显示绿色检查。你需要第三个,例如

if (!$Name) {
    //show nothing
}
else if (!$result) {
    //show red x
}
else {
    //show green check
}

在不相关的说明中,您使用 PDO 很好,但您需要正确参数化查询以防止注入。

【讨论】:

  • 不用担心。当它投入生产时,我们将使用命名占位符。这只是一个原型设计练习。 ;-)
【解决方案2】:

尝试像这样重写你的逻辑:

if ($Name != ''){
    $check = $con->prepare("SELECT Username FROM emaillist WHERE Username = '$Name'");
    $check->execute();
    $result = $check->fetchColumn(); //Get exact column
    if(!$result) {
          // show red x 
    } else { 
         // show green check 
    }
}
else {
    // show red here or some other input error message
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2013-06-12
    • 2015-03-25
    相关资源
    最近更新 更多