2015-05-05 44 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