我有这段代码:
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);
答案 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]
(数组的第三个值)不是1
,2
或3
,则您的函数将返回false
。
这可能会破坏你的逻辑。尝试将0
更改为2
,看到它不会在您的查询中添加引号,第二项是number
值。