Вам нужно перенести вашу строку в цикл - как указывало @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 , чтобы узнать, как их использовать.