如何为每个循环在php中同时存储多行?

时间:2018-06-20 13:17:24

标签: php mysql foreach

我正在使用以下代码将数据存储在表中。

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中仅插入最后一个文件。请帮我解决这个问题。

2 个答案:

答案 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;