我有两个这样的功能:
function mysql_safe_query($format) {
$args = array_slice(func_get_args(),1);
$args = array_map('mysql_safe_string',$args);
$query = vsprintf($format,$args);
$result = mysql_query($query);
if($result === false) echo '<div class="mysql-error">',mysql_error(),'<br/>',$query,'</div>';
return $result;
}
function mysql_row_exists() {
$result = mysql_safe_query(func_get_args());
return mysql_num_rows($result) > 0;
}
问题是第二个函数不起作用,因为它将args作为数组传递给第一个函数,当它将它们视为不同的参数时。有没有办法解决这个问题,最好不要修改mysql_safe_query
?
答案 0 :(得分:23)
如何使用:
$args = func_get_args();
call_user_func_array('mysql_safe_query', $args);
答案 1 :(得分:7)
N.B。在PHP 5.6中,您现在可以执行此操作:
function mysql_row_exists(...$args) {
$result = mysql_safe_query(...$args);
return mysql_num_rows($result) > 0;
}
此外,对于未来的读者,不推荐使用mysql_ * - 请勿使用这些功能。
答案 2 :(得分:0)
根据具体情况,以下内容可能对您有用,可能会更快一些。
function mysql_safe_query($format) {
$args = func_get_args();
$args = is_array($args[0]) ? $args[0] : $args; // remove extra container, if needed
// ...
现在允许这两种类型的调用,但如果您的第一个值应该是一个实际的数组,则可能会出现问题,因为它会以任何方式解压缩。
您还可以检查根数组的长度,因此如果有其他元素,可能不会解压缩,但如上所述:它通常不是“干净”,但可能有用且快速: - )