multi []数组输入插入php sql

时间:2018-05-01 21:32:49

标签: php mysqli

这是我的输入表格 -

<input type="text" multiple name="name[]">  
<input type="text" multiple name="mobile[]"> 
<input type="text" name="invoice_no">

这是我试过的mySQL插件的php脚本 -

$name=mysqli_real_escape_string($con, $_POST['name']);
$mobile=mysqli_real_escape_string($con, $_POST['mobile']);
$invoice_no=mysqli_real_escape_string($con, $_POST['invoice_no']);


foreach($mobile as $a => $b){

$sql="INSERT INTO `customer` (`name`, `mobile`, `invoice_no`)
VALUES('$name[$a]', '$mobile[$a]', '$invoice_no')";

}

if ($con->query($sql) === TRUE) {
echo "Success";
} else {
echo("Error: " . mysqli_error($con));
}

我正在尝试将name []和mobile []数组作为单独的行插入,而invoice_no是固定数据。这样做的方法是什么?

1 个答案:

答案 0 :(得分:1)

你需要将你的字符串转义到循环中 - 正如@smith指出的那样,mysqli_real_escape_string应该应用于字符串,而不是数组。此外,您只进行一个插入一组值的查询,而不是插入所有值的查询。因此,您可以将查询的执行带入循环,或者构建一个将一次插入所有行的查询。后者是最有效的:

$invoice_no = mysqli_real_escape_string($con, $_POST['invoice_no']);
$sql = "INSERT INTO `customer` (`name`, `mobile`, `invoice_no`) VALUES ";
$values = array();
foreach ($_POST['mobile'] as $key => $value) {
    $name = mysqli_real_escape_string($con, $_POST['name'][$key]);
    $mobile = mysqli_real_escape_string($con, $value);
    $values[] = "('$name', '$mobile', '$invoice_no')";
}
$sql .= implode(',', $values);
if ($con->query($sql) === TRUE) {
    echo "Success";
} else {
    echo("Error: " . mysqli_error($con));
}

请注意,为避免可能的注入攻击,您应该使用预准备语句。请参阅mysqli_prepare上的手册,了解如何使用它们。