2014-07-04 35 views
0

我正在开发一个应用程序,在该应用程序中,如果某一行中的任何字段为空或不空白,我需要单击该应用程序。如果任何字段为空,则变量$flag应该为1,否则为零。 我已经写了,直到这里,但我不知道接下来要做什么来检查每个字段是否为空/空或不。检查是否有任何字段在一行中为空

public function profileComplete($email) 
{ 
    global $conn; 
    $flag=0; 
    try 
    { 
     $s = $conn->prepare("SELECT * from users where emailid = : email"); 
     $s->bindParam(":email",$email); 
     $s->execute(); 
     $s->setFetchMode(PDO::FETCH_OBJ); 
     while($row = $s->fetch()) 
     { 

     } 
    } 
} 

我该如何编码才能使其按照要求工作? 所有的建议表示赞赏。

+1

没有捷径。你必须做'where field1为null或者field2为空或者field3为null ....或者fieldn为null'。 –

+0

@MarcB:这显然不是真的。只要在'$ row'内有任何非NULL元素时,只需在该循环内设置'$ flag' ... –

+0

那么整个全局的事情,是一个设计缺陷? –

回答

1

Id与数组过滤器一起去计数行,以避免内部循环。

$num_fields = 8; //should know this before hand but you could compare $row and $_row below but it would be more expensive to run. 
while($row = $s->fetch()){ 
    $_row = array_filter($row); //removes all empty elements 
    if(count($_row) != $num_fields){ 
     //some fields are empty 
    } 
} 

如果你认为0是空的,这将是罚款。 - 注意 - empty()也会将0视为空,如果你需要0不为空,你可以在array_filter中使用自定义函数来进行=== 0严格等于或者!== 0的回调来检查。

empty()将这些值视为空 - 并在它们上返回TRUE。

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
$var; (a variable declared, but without a value) 
1
public function profileComplete($email) 
    { 
    global $conn; 
    $flag=0; 
    try 
    { 
    $s = $conn->prepare("SELECT * from users where emailid = : email"); 
    $s->bindParam(":email",$email); 
    $s->execute(); 
    $s->setFetchMode(PDO::FETCH_OBJ); 
    while($row = $s->fetch()) 
    { 
      foreach($row as $r){ 
      if(is_null($r) || $r==''){ 
       $flag=1; 
      } 
      } 
    } 
    } 
} 
1
while($row = $s->fetch()) 
{ 
    foreach($row as $val) 
    { 
     if(empty($val)) { $flag = 1; } 
    } 
} 

'空()' 假设你想赶上空,假,空字符串和零。如果您不想捕获零/假,请使用if(is_null($val) || $val == '') { $flag = 1; }

1

试试这个,虽然我没有检查输出。希望它可以帮助你! :)

while($row = $s->fetch()){ 
    foreach($row as $rowval){ 
      if($rowval == null || empty($rowval)){ 
      $flag=1; 
      } 
    } 
} 
+0

null为空(),如果OP有布尔0字段或字段,例如价格总和为0且不应被视为空,则检查确实应为(空($ rowval)&&!== 0)。 – ArtisticPhoenix