您必须在WordPress中看到过这种情况,如何将参数传递给函数,并根据您传递的参数查询数据库。如果参数未通过。它将航空回归到默认参数。我想在自定义函数中完成同样的事情。
function get_module( $args = NULL ){
$defaults = array(
"module_id" => NULL,
"module_slug" => NULL,
"module_parent" => NULL,
"module_status" => "publish"
);
global $db;
global $table_prefix;
$sql = "SELECT * FROM $table_prefix" . "modules";
$query = $db->SELECT($sql);
return $db->FETCH_OBJECT();
}
答案 0 :(得分:0)
好的,让我们一步一步来做。
如果参数未通过。它将航海回归默认参数
你已经拥有一个$defaults
数组,现在的问题是如何获得它"在一起"使用$args
- 解决方案正在使用array_merge()
。如果您合并了$args
和$defaults
,则需要注意$args
'元素覆盖$defaults
- 而不是相反。 (fiddle)
$options = array_merge($defaults, $args) // good
$options = array_merge($args, $defaults) // bad
现在的问题是:您是否要在数据库中查询值为NULL
的条目?我不这么认为,array_filter()
现在派上用场删除那些不需要的元素。这个小片段应该可以解决这个问题:
function notNull($value) {
return $value !== NULL;
}
$options = array_filter($options, "notNull");
现在你有一个数组$options
,应该在查询中使用。为此,您需要遍历数组,因为您需要每个项目的键和值。执行此操作时,您可以构建WHERE
部分。
$where = "";
if (count($options) > 0) {
foreach ($options as $key=>$value) {
if (!empty($where))
$where .= " AND ";
else
$where = " WHERE ";
$where .= sprintf("`%s` = `%s`", $key, $value);
}
}
由于sprintf()
,这会自动将值转换为字符串,您可以添加额外的检查(我认为不应该在MySQL中引用数值)。
您还可以使用将在循环中创建的预准备语句,然后设置值。