带有“variable”“”或“variable”的PHP/MySQL SELECT语句不为NULL不起作用
我编写了一个SQL例程,将用户的输入与表中的现有值进行比较。如果该值存在,则输入旁边会显示一个绿色复选标记。如果没有,则会显示一个红色的x。我的SQL语句如下:带有“variable”“”或“variable”的PHP/MySQL SELECT语句不为NULL不起作用,php,mysql,sql,Php,Mysql,Sql,我编写了一个SQL例程,将用户的输入与表中的现有值进行比较。如果该值存在,则输入旁边会显示一个绿色复选标记。如果没有,则会显示一个红色的x。我的SQL语句如下: $check = $con->prepare("SELECT count(*) FROM emaillist"); $check->execute(); $result = $check->fetchColumn(); //Get no. of columns $chec
$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,匹配时出现绿色复选框;但是,如果字段留空,我不希望显示任何内容。现在,如果字段为空或为空,则会显示红色的x。使用IS NOT NULL也不起作用。我遗漏了什么?您只有两个分支:显示红色x和显示绿色支票。你需要第三个
if (!$Name) {
//show nothing
}
else if (!$result) {
//show red x
}
else {
//show green check
}
另一方面,使用PDO很好,但需要正确地参数化查询以避免注入。您只有两个分支:显示红色x和显示绿色检查。你需要第三个
if (!$Name) {
//show nothing
}
else if (!$result) {
//show red x
}
else {
//show green check
}
另一方面,使用PDO很好,但您需要正确地参数化查询以避免注入。尝试像这样重写您的逻辑:
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
}
尝试像这样重写您的逻辑:
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
}
如果$Name来自用户输入,则我认为最好独立于SQL查询检查其有效性,而不是将其放入查询本身。如果$Name来自用户输入,则我认为最好独立于SQL查询检查其有效性,而不是将其放入查询本身。无需担心。当它投入生产时,我们将使用命名占位符。这只是一个原型练习-别担心。当它投入生产时,我们将使用命名占位符。这只是一个原型练习-