我有一个关于在while循环中将自定义函数应用于mysql_fetch_assoc的问题。请参阅下面的代码。
//current php page
$query = mysql_query("SELECT ... "); //returns multiple rows
while($rs = whileF($query)) {
//do some fantastic stuff
}
//... functions.php page
function whileF($value = array()) {
$var = mysql_fetch_assoc($value);
foreach($var AS $k => $v) {
$var[$k] = stripslashes($v);
}
return $var;
}
我的问题是我希望能够使用这种类型的函数自动剥离不同字段的斜杠(我还想在必要时记录一些调试数据),但它不会似乎合作得太好了。如果我做了..
print_r($var);
它将返回数组中的所有值,但是通过执行foreach语句,我一直得到“警告:在/home/.../includes/functions.php中为foreach()提供的参数无效”,如果我尝试此...
$var = array_map('stripslashes',$var);
我得到“警告:array_map()[function.array-map]:参数#2应该是/ home /.../ includes / functions.php中的一个数组”
奇怪的是,它似乎正确地应用了foreach / array_map函数(值被剥离)。我不想关闭错误,只是为了让它们消失,因为那样......编程效率会降低。我知道whileF()函数正常工作,因为它仍然显示所有信息,如果我拿走foreach / array_map语句,它将运行没有任何错误。
思考?我知道我错过了什么......
提前致谢。
答案 0 :(得分:2)
那是因为对mysql_fetch_assoc的最后一次调用返回false。你应该将foreach包装在if:
中function whileF($value = array()) {
$var = mysql_fetch_assoc($value);
if ($var) {
foreach($var AS $k => $v) {
$var[$k] = stripslashes($v);
}
}
return $var;
}
答案 1 :(得分:1)
尽管Draevor回答了这个问题,但我还是想提出一些问题。
stripslashes()
绝对毫无意义。然后遍历此数组以应用所需的任何修改:
$data = $db->getArr("SELECT * FROM table LIMIT 10");
forach ($data as $i => $row) {
$data[$i]['name'] = htmlspecialchars($row['name']);
}
因此,您将拥有应用的任何自定义函数,而无需自定义函数。