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);
}
}
fyi - 我不知道任何允许你绑定列名的数据库。 MySQL肯定不会。 – goat
@rambocoder这只是一个简单的示例脚本。我可能会直接输入它,因为$表键由代码设置,而不是通过用户输入 – Darkaaja
您不能绑定列名,因此对于您的查询,您可以绑定所需的值。如果您确实需要更改列名,您可以使用'mysqli_real_escape_string()'并通过串联构造查询来确保列名和值的安全。毫无疑问,学者们会抱怨这一点,但做得妥妥当,这是安全的。 – 2014-02-23 01:32:37