foreach结束时变量为空

时间:2014-02-28 11:46:37

标签: php foreach

我有这段代码:

  function composeInsertSql($insertData)
  {
    $columns = '';
    $values = '';
    foreach($insertData as $data)
    {
      $columns .= $data[0].', ';
      if($data[2] == 1)
      {
        $values .= '"'.$data[1].'", ';
      }
      else if($data[2] == 2)
      {
        $values .= $data[1].', ';
      }
      else if($data[2] == 3)
      {
        $values .= 'md5("'.$data[1].'"), ';
      }
      else
      {
        return false;
      }
    }
    $result['columns'] = rtrim($columns, ', ');
    $result['values'] = rtrim($values, ', ');
    return $result;
  }

当它是一个独立的函数时,代码工作正常,但在类中它不起作用。 当它在一个类中时,变量“values”和“columns”在foreach完成时为空。在foreach中我使用echo,我可以看到它们的值,但是当它完成时它们是空的。

对此类函数的调用是在同一个类中的另一个类函数:

  function genericInsert($table, $insertData)
  {
    $sqlData = self::composeInsertSql($insertData);
    $columns = $sqlData['columns'];
    $values = $sqlData['values'];
    $sqlInsert = 'INSERT INTO '.$table.' ('.$columns.') values ('.$values.')';

    echo "$sqlInsert\n"; // borrar y descomentar las siguientes lineas.

两个函数都在同一个类中。对此功能的调用是:

$db = new DB();
$dblink = $db->connect();

$insertData = array(
  array('paypal_id', '161411002', '2'),
  array('name', 'Marco', '1'),
  array('mail', 'marco@rarara.com', '1'),
  array('product_id', '1', '2'),
  array('profile_id', '1', '2'),
  array('insert_time', 'now()', '2'),
  array('state', '1', '0')
);

$db->genericInsert('user_client2', $insertData);

1 个答案:

答案 0 :(得分:0)

我认为你在这里遇到了逻辑问题。在$insertData最后array上:

$insertData = array(
    array('state', '1', '0') <-- note the third item value is 0
);

在你的功能中你有这些条件:

if($data[2] == 1)
else if($data[2] == 2)
else if($data[2] == 3)
else
{
  return false;
}

请注意,如果您的$data[2](数组的第三个值)不是123,则您的函数将返回false

这可能会破坏你的逻辑。尝试将0更改为2,看到它不会在您的查询中添加引号,第二项是number值。