为默认调用的数据库字段分配默认值

时间:2010-11-13 15:40:22

标签: php mysql database field

我正在尝试一个社交网站,我的亲戚作为一个副项目。我自己写的大部分都是。我已经做了这样,所以每个用户都存储在一个带有数据(mysql)的表中,我想做一个比较语句,这样如果一个字段为空,将收到的变量改为“无数据”。

例如: 人员数据

name=john
age=34
mobile number=(empty because it hasnt been entered)

所以当我收到带有mysql_func_assoc函数的资源id时 $ result = mysql_query($ sql);

$db_field = mysql_fetch_assoc($result);
$szUser_name=$db_field['user_name'];
$szAge=$db_field['user_age'];
$szNumber=$db_field['user_number'];

现在我想要一个if语句来识别一个空白字段(类似if($ szUser ==“”|| $ szAge ==“”|| $ szNumber ==“”))然后自动更改相应的字段到“没有数据”。我可以将所有值设置为=“无数据”,并通过assoc函数重新分配,但我正在寻找一个简洁的选项。提前致谢

4 个答案:

答案 0 :(得分:2)

也许把它放到一个函数中,这样你就可以重用代码了?

function getField($fieldName, $fields, $default="No data") {
   return empty($fields[$fieldName]) ? $default : $fields[$fieldName];
}

所以

$szNumber=$db_field['user_number'];

变为

$szNumber=getField('user_number', $db_fields);
编辑:是的,你是对的

// Nitpick: 添加's'到$ db_field,因为它包含多个字段。或者考虑将其重命名为$ db_row

答案 1 :(得分:1)

如果您的“空”字段实际设置为NULL

对于纯MySQL解决方案,您可以使用COALESCE来实现您想要的,假设“空”字段设置为NULL。例如:

SELECT COALESCE(`user_name`, 'No data') AS `username` FROM `users`

IFNULL以类似的方式工作,可能比COALESCE更适合这项工作:

SELECT IFNULL(`username`, 'No data') AS `username` FROM `users`

COALESCE可以有很多参数,只返回第一个NOT NULL参数,而IFNULL只接受两个参数,它接受第一个NOT NULL参数。

如果您的“空”字段实际上是空字符串:

如果您的值是空字符串而不是NULL,那么您可以使用:

SELECT IF('' = `username`, 'No data', `username`) AS `username` FROM `users`

有关MySQL IF函数see the manual的更多信息。

如果您有两个空字符串和NULL的组合:

您可以使用:

SELECT IF('' = `username` OR `username` IS NULL, 'No data', `username`) AS `username` FROM `users`

答案 2 :(得分:0)

这通常是使用三元运算符的事情:

$szNumber = (!empty($db_field['user_number'])) ? $db_field['user_number'] : 'No data';

或者,您可以使用完整的if / else块。

您还可以在查询中使用CASE语句:

SELECT CASE WHEN user_number = '' THEN 'No data' ELSE user_number END AS user_number
FROM yourtable

但它可能使查询难以阅读。

答案 3 :(得分:0)

最佳选择是为您的应用程序选择基于MVC的体系结构,将原始sql-data从控制器传输到视图中,并决定在视图部分中输出哪些数据。例如,Zend Framework允许使用名为“view helpers”的类,它将显示“No data”而不是空字符串。