Php 检查mysql表中的空字段
我有一个12列200行的表。我想使用php/mysql有效地检查此表中的空/空字段。第3列第30行为空。有没有一个功能可以做到这一点? 简而言之:从任何列都有空字段的表中选择*。空!=空的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 $
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...
}
}
}