2014-02-23 53 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

回答