Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查mysql表中的空字段_Php_Mysql_Sql - Fatal编程技术网

Php 检查mysql表中的空字段

Php 检查mysql表中的空字段,php,mysql,sql,Php,Mysql,Sql,我有一个12列200行的表。我想使用php/mysql有效地检查此表中的空/空字段。第3列第30行为空。有没有一个功能可以做到这一点? 简而言之:从任何列都有空字段的表中选择*。空!=空的 SELECT * FROM table WHERE COLUMN IS NULL 据我所知,MySQL中没有任何函数可以检查每一列,我想你必须循环检查这些列,就像这样 $columns = array('column1','column2','column3'); foreach($columns as $

我有一个12列200行的表。我想使用php/mysql有效地检查此表中的空/空字段。第3列第30行为空。有没有一个功能可以做到这一点? 简而言之:从任何列都有空字段的表中选择*。

空!=空的

SELECT * FROM table WHERE COLUMN IS NULL

据我所知,MySQL中没有任何函数可以检查每一列,我想你必须循环检查这些列,就像这样

$columns = array('column1','column2','column3');
foreach($columns as $column){
  $where .= "$column = '' AND ";
}
$where = substr($where, 0, -4);
$result = mysql_query("SELECT * FROM table WHERE $where",$database_connection);
//do something with $result;
=将为您获取空字段

$sql = "SELECT * FROM TABLE_PRODUCTS";
$res = mysql_query($sql);

$emptyFields = array();

while ($row = mysql_fetch_array($res)) {
    foreach($row as $key => $field) {
        if(empty($field)) || is_null($field) {
            $emptyFields[] = sprintf('Field "%s" on entry "%d" is empty/null', $key, $row['table_primary_key']);
        }
    }
}

print_r($emptyFields);
没有测试,所以可能会有打字错误,但这是主要的想法。 如果您想确切地知道哪一列是空的或空的,就需要这样做


而且,在一张很大的桌子上做这件事并不是一种非常有效的方法,但在一张200行长的桌子上应该是快速的。也许有更简洁的解决方案来处理应用程序中的空/空字段,不需要像这样显式地检测它们,但这取决于您想做什么:

您可以尝试以下方法:

//do connection stuff beforehand

$tableName = "foo";

$q1 = <<<SQL
SELECT
  CONCAT(
    "SELECT * FROM $tableName WHERE" ,
    GROUP_CONCAT(
      '(' ,
      '`' ,
      column_name,
      '`' ,
      ' is NULL OR ',
      '`' ,
      column_name ,
      '`',
      ' = ""' , ')'
      SEPARATOR ' OR ')
    ) AS foo
FROM
information_schema.columns
WHERE
table_name = "$tableName"

SQL;

$rows = mysql_query($q1);

if ($rows)
{
    $row = mysql_fetch_array($rows);
    $q2 = $row[0];
}

$null_blank_rows = mysql_query($q2);

// process the null / blank rows..

检查此代码是否为空字段

$sql = "SELECT * FROM tablename WHERE condition";

$res = mysql_query($sql);

while ($row = mysql_fetch_assoc($res)) {

    foreach($row as $key => $field) { 
        echo "<br>";
        if(empty($row[$key])){
            echo $key." : empty field :"."<br>";        
        }else{
            echo $key." =" . $field."<br>";     1
        }
    }

}

在这里,我使用的是一个带有名称单词的表

$show_lang = $db_conx -> query("SHOW COLUMNS FROM words");
        while ($col = $show_lang -> fetch_assoc()) {
            $field = $col['Field'];
            $sel_lan = $db_conx -> query("SELECT * FROM words WHERE $field = '' ");
            $word_count = mysqli_num_rows($sel_lan);
            echo "the field ".$field." is empty at:";
            if ($word_count != 0) {
              while($fetch = $sel_lan -> fetch_array()){
                echo "<br>id = ".$fetch['id']; //hope you have the field id...
              }
            }
        }

没有类似的函数,但如果允许使用其他语言,则可以提取表的结构并使用该结构生成查询。
如果您只需要在一个包含30列的表中使用它,那么手动编写查询会更快…

您好,谢谢。有没有办法一次列出所有列,而不是手动列出列?谢谢,伙计,它现在工作起来很神奇。只需要格式化一下。节省了我很多时间。您的表中没有第30行。这是一堆,不是有序列表。
$sql = "SELECT * FROM tablename WHERE condition";

$res = mysql_query($sql);

while ($row = mysql_fetch_assoc($res)) {

    foreach($row as $key => $field) { 
        echo "<br>";
        if(empty($row[$key])){
            echo $key." : empty field :"."<br>";        
        }else{
            echo $key." =" . $field."<br>";     1
        }
    }

}
$show_lang = $db_conx -> query("SHOW COLUMNS FROM words");
        while ($col = $show_lang -> fetch_assoc()) {
            $field = $col['Field'];
            $sel_lan = $db_conx -> query("SELECT * FROM words WHERE $field = '' ");
            $word_count = mysqli_num_rows($sel_lan);
            echo "the field ".$field." is empty at:";
            if ($word_count != 0) {
              while($fetch = $sel_lan -> fetch_array()){
                echo "<br>id = ".$fetch['id']; //hope you have the field id...
              }
            }
        }