2015-09-24 61 views
1

我不是PHP中的massiv,但我使用的函數是使用mysqli將數據從數組插入到我的數據庫中。在包含在函數中的mysqli_real_escape_string中包含數據庫連接

的功能如下: -

$con=mysqli_connect("host","user","password","database"); 

function mysql_insert($con, $table, $inserts) { 
    $values = array_map('mysqli_real_escape_string', array_values($inserts)); 
    $keys = array_keys($inserts); 

    return mysqli_query($con, 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')'); 

    mysqli_close($con); 
} 

這裏是數組: -

mysql_insert($con, 'table_name', array(
    'id' => NULL, 
    'key1' => 'value1', 
    'key2' => 'value2', 
    'Key3' => 'value3' 
)); 

,我發現了錯誤

警告:mysqli_real_escape_string()正是希望2個參數,1中給出的參數XXX

我知道mysqli_real_escape_string需要兩個參數,第一個參數是$con,第二個參數是字符串,但我很難知道如何格式化函數中的代碼以包含數據庫連接。

請任何人都可以幫忙嗎?

在先進的感謝非常:)

+1

更好的解決方案:根本不要逃避東西,並使用準備好的語句和佔位符。那麼你不必逃避,這段時間。 –

回答

2

你無法mysqli_real_escape_string使用array_map,因爲你只能通過一個參數。 但您可以添加它調用mysqli_real_escape_string的方法 - 這可能內嵌像這樣

$values = array_map(function($item) use ($con) { 
    return mysqli_real_escape_string($con, $item); 
}, array_values($inserts)); 

記住定義,你必須使用use,因爲$ con是不是化名函數內部可見。

+0

嗯,你可以,你只需要編寫你在回調中使用的函數不要使用'mysqli_real_escape_string'生日 –

+0

嗨菲利普,這是最簡單和非臃腫的方法,我喜歡保持最小。 :) 謝謝你的幫助!在我將其標記爲接受之前,@Dagon提到您不要使用'mysqli_real_escape_string' raw,這種方法可能會導致未來的問題嗎? – will9455

1

,你在程序模式下使用mysqli_real_escape_string,你需要通過「鏈接」,所以你需要創建調用自定義函數回到

​​3210

然後用

$values = array_map('array_map_callback', array_values($inserts)); 
+0

這種方法也奏效,非常感謝!當我明白哪一種方法是最好的,我會贊成或接受。 – will9455