2015-05-05 45 views
0

所以我试图从包含用下面的代码为一个表的每行保持数据的多个阵列的阵列将数据插入MySQL表:具有空的MySQL插入误差值

if (is_array($tbl_data)){ 
$sql = "INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values "; 
$arrayValues = array(); 
foreach ($tbl_data as $row){ 

    $agent = mysql_real_escape_string($row[0]); 
    $event = mysql_real_escape_string($row[1]); 
    $data1 = mysql_real_escape_string($row[2]); 
    $data2 = mysql_real_escape_string($row[3]); 
    $data3 = mysql_real_escape_string($row[4]); 
    $data4 = mysql_real_escape_string($row[5]); 
    $data5 = mysql_real_escape_string($row[6]); 

    $value = "($agent,$event,$data1,$data2,$data3,$data4,$data5)"; 
    array_push($arrayValues, $value); 
} 
$sql .=implode(',', $arrayValues); 

快速检查使用var_dum($sql)产生以下:

INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values (NONE,QUEUESTART,,,,,)///// 

上面的SQL是无效的,由于所述多个逗号这里:(NONE,QUEUESTART,,,,,)其通过空字段生成。如何在查询中插入单引号以使其有效?即正确的SQL语法:

INSERT INTO teshsting (agent, event , data1,data2,data3,data4,data5) values (NONE,QUEUESTART,'','','','','') 

回答

2

或者:

$data1 = "'" . mysql_real_escape_string($foo) . "'"; 

$value = "(...,'$data1',...)"; 

只是不要尝试这两个选项,这将使你(...,''$data1'',...)和杀死与语法错误查询。

+0

感谢这种修复它,但我遇到了另一个我不确定的错误。为什么'values(Local/120 @ disc-agents/n,ADDMEMBER,','','','','')'会导致sql语法错误? – b0w3rb0w3r

+0

'local/120 @ disc-agents/n'看起来像一个有效的字段名称吗? –

+0

我插入字符串'local/120 @ disc-agents/n',它不是字段名称。 – b0w3rb0w3r