我正在使用以下代码将数据存储在表中。
public function insert_pay_slip_data($data,$com_name)
{
$con = $this->__construct();
$data = explode(',', $data[0]);
foreach ($data as $value)
{
$sql = "INSERT INTO `pay_slips`(`paye_id`, `trade_id`, `inv_pdf`, `created_date`,
`created_by`) VALUES (LAST_INSERT_ID(), '".$com_name."','".$value."',NOW(),'".$_SESSION['email']."')";
$execute = mysqli_query($con, $sql);
return $execute;
}
}
在print_r($ data)上,我从视图中获取要上传的所有文件:
Array ( [0] => 6650f7.pdf [1] => 34a3f.pdf [2] => 169512017.pdf )
我在$ data中得到了这个数组。所以我关心的是存储每个文件 在具有不同主键的不同行中。
但是在每个循环中,$ data仅显示最后上传的文件,而在db中仅插入最后一个文件。请帮我解决这个问题。
答案 0 :(得分:2)
return $execute;
您是否知道插入一行后会退出函数?这将终止循环。
阅读http://php.net/return以获得有关PHP中return
语句的文档。
这与您尽早结束循环的问题无关,但是您的代码不安全,很容易受到 SQL注入的影响。
您应该使用查询参数,而不是将变量连接到SQL语句中。阅读How can I prevent SQL injection in PHP?,了解有关SQL注入的更多详细信息。
与所有'".$value."'
序列相比,使用查询参数更安全,并且实际上更容易编写代码。
答案 1 :(得分:0)
您可以像这样尝试单身短裤:
$sql = "INSERT INTO `pay_slips`(`paye_id`, `trade_id`, `inv_pdf`, `created_date`, `created_by`) VALUES";
$i = 0;
foreach ($data as $value)
{
if($i>0) {
$sql .=",(LAST_INSERT_ID(), '".$com_name."','".$value."',NOW(),'".$_SESSION['email']."')";
} else {
$sql .="(LAST_INSERT_ID(), '".$com_name."','".$value."',NOW(),'".$_SESSION['email']."')";
}
}
$execute = mysqli_query($con, $sql);
return $execute;