2012-07-27 159 views
1

我試圖找到與此答案的另一個問題,但我沒有運氣。我的問題基本上是......這項工作?插入數組值到MySQL

$insert_tweets = "INSERT INTO tweets (
    'id', 
    'created_at', 
    'from_user_id', 
    'profile_image', 
    'from_user', 
    'from_user_name', 
    'text' 
) VALUES (
    {$user_data[$i]["id"]}, 
    {$user_data[$i]["created_at"]}, 
    {$user_data[$i]["from_user_id"]}, 
    {$user_data[$i]["profile_image"]}, 
    {$user_data[$i]["from_user"]}, 
    {$user_data[$i]["from_user_name"]}, 
    {$user_data[$i]["text"]} 
)" 

     for($i=0;$i<count($user_data);$i++){ 
      mysqli_query($mysqli,$insert_tweets); 
     } 

$ user_data是一個多維數組,它的第一個級別是數字,後面的級別是關聯的。

此外,在插入之前「數據庫準備」/清理關聯數組變量的最佳方法是什麼?我沒有預料到任何惡意數據,但總是有可能的。

+0

是,如果你解決語法錯誤,將工作,缺少';'在SQL結束_and_內移動的SQL字符串你的循環。 ')''' – 2012-07-27 02:46:18

+0

你不需要圍繞列名引用單引號 – lusketeer 2012-07-27 02:49:17

回答

3
 for($i=0;$i<count($user_data);$i++){ 
      $insert_tweets = "INSERT INTO tweets ('id','created_at','from_user_id','profile_image','from_user','from_user_name','text') VALUES ({$user_data[$i]["id"]},{$user_data[$i]["created_at"]},{$user_data[$i]["from_user_id"]},{$user_data[$i]["profile_image"]},{$user_data[$i]["from_user"]},{$user_data[$i]["from_user_name"]},{$user_data[$i]["text"]})"; 
      mysqli_query($mysqli,$insert_tweets); 
     } 

這應該工作

+0

哦,gees,這是一個愚蠢的錯誤,謝謝你的注意,簡而言之,SQL語句看起來不錯,但? – Chad 2012-07-27 02:49:24

+0

嘿試試這個,告訴我怎麼了。 – 2012-07-27 02:50:15

3

是的,它會工作,但要做到這一點的最好辦法是使用PDO。

您可以在您的prepare語句中創建無名參數,然後傳遞一個數組來將值綁定到這些參數。

$data = array('val1', 'val2'); 
$query = $db->prepare("INSERT INTO table (col1, col2) VALUES (? , ?)"); 
$query->execute($data); 

PDO將爲您跳過輸入值。

這裏有PDO的教程,讓你開始 http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

1

這是我在消毒的陣列建議:

我做的是對消毒的數據創建一個基本功能:

function array_sanitize(&$item){ 
    $item = mysql_real_escape_string($item); 
} 

然後,您可以使用array_walk()來用您的新功能清理陣列。 (php manual refrence

,並通過您的數組中傳遞這樣的消毒:

array_walk($user_data, 'array_sanitize');