【问题标题】:while loop applying custom function to mysql_fetch_assocwhile 循环将自定义函数应用于 mysql_fetch_assoc
【发布时间】:2011-12-28 22:44:21
【问题描述】:

我有一个关于在 mysql_fetch_assoc 在 while 循环中应用自定义函数的问题。请参阅下面的代码。

//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 语句,它将运行而不会出现任何错误。

想法?我知道我错过了什么......

提前致谢。

【问题讨论】:

    标签: php mysql function while-loop


    【解决方案1】:

    虽然 Draevor 回答了这个问题,但我还是想提出一些问题。

    1. 在您从数据库中获得的数据上使用stripslashes() 绝对没有意义。
    2. 尽管有理由应用另一个函数。但我不会为此创建自定义函数,而是创建一个函数将日期正确放入数组中,

    然后循环遍历该数组以应用所需的任何修改:

    $data = $db->getArr("SELECT * FROM table LIMIT 10");
    forach ($data as $i => $row) {
      $data[$i]['name'] = htmlspecialchars($row['name']);
    }
    

    因此,您将应用任何自定义函数而无需自定义函数。

    【讨论】:

      【解决方案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;
      }
      

      【讨论】:

      • 你在我的英雄榜上名列前茅。对于那些关心的人,您还可以为 foreach 切换 array_map() 函数,它会像宝石一样工作。
      猜你喜欢
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2014-11-28
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多