2014-02-23 51 views
1

我想要做的就是創建一個準備好的語句,它將根據輸入的數組插入值,該數組將是動態的。動態的意思是通過包含一個額外的行(如下面的註釋掉的行)來更改數組0123'的能力,並且它正確發送並將值插入表中,而不管有多少行存在。因爲我的新用途準備好的發言的我不能用我以前的方法:如何使用動態數組運行MySQLi準備語句?

INSERT INTO table ($fields) VALUES ($data) 

因爲這是不安全的,是開放的SQL注入。

$table = array(); 
$table['Favorite_Chocolate']  = 'Milk'; 
$table['Favorite_Cake']   = 'Vanilla'; 
$table['Favorite_IceCream']  = 'Neapolitan'; 
//$table['Favorite_Candy']  = 'Taffy'; 

function magic_insert ($table, $dbc) { 

    if ($stmt = mysqli_prepare($dbc, "INSERT INTO mytable (?, ?, ?) VALUES (?, ?, ?)")) { 
      mysqli_stmt_bind_param($stmt, "ssssss", $1, $2, $3, $4, $5, $6); 
      $1 = array_keys($table)[0]; 
      $2 = array_keys($table)[1]; 
      $3 = array_keys($table)[2]; 
      $4 = array_values($table)[0]; 
      $5 = array_values($table)[1]; 
      $6 = array_values($table)[2]; 

      mysqli_stmt_execute($stmt); 
      mysqli_stmt_close($stmt); 
     } 
    } 
+0

fyi - 我不知道任何允許你綁定列名的數據庫。 MySQL肯定不會。 – goat

+0

@rambocoder這只是一個簡單的示例腳本。我可能會直接輸入它,因爲$表鍵由代碼設置,而不是通過用戶輸入 – Darkaaja

+0

您不能綁定列名,因此對於您的查詢,您可以綁定所需的值。如果您確實需要更改列名,您可以使用'mysqli_real_escape_string()'並通過串聯構造查詢來確保列名和值的安全。毫無疑問,學者們會抱怨這一點,但做得妥妥當,這是安全的。 – 2014-02-23 01:32:37

回答