首页 > 解决方案 > 如何使用 PHP 将数据数组插入数据库?

问题描述

我得到如下的数组值

Array
(
    [0] => Array
        (
            [upload_label] => label 1
            [upload_name] => 100-best_1940225136.png
            [society_id] => 57
        )

    [1] => Array
        (
            [upload_label] => label 2
            [upload_name] => 150x150_2147441709.png
            [s_id] => 57
        )

)

现在我必须将数据插入数据库。所以我使用了下面的惰性代码

$sqlUpload="INSERT INTO `tbl_uploadAll`(upload_label,upload_name,s_id) VALUES (:upload_label,:upload_name,:s_id)";
$stmt= $pdo->prepare($sqlUpload);
$stmt->execute($dataupload);

当我按下按钮时,在网络选项卡中出现 500 错误

我的完整代码在这里

if (isset($_POST['send'])) {


$total = count($_FILES['docUpload']['name']);
$dataupload=array();
for($i=0; $i < $total; $i++) {

if(isset($_FILES['docUpload']['name'][$i]) && $_FILES['docUpload']['name'][$i] != "")
{
    $foldername="profile";
    $uploadLabel=$_POST['docUploadLabel'][$i];

      $image1  = $_FILES['docUpload']['name'][$i];
      $filename  = basename($image1);
      $onlyfile = pathinfo($filename, PATHINFO_FILENAME);
      $extension = pathinfo($filename, PATHINFO_EXTENSION);

      $file      = mt_rand();// random number 
      $newname   = $onlyfile.'_'.$file.'.'.$extension;
       
      //$location='images/'.$foldername.'/'.$newname;
       $location='../assets/images/uploads/'.$foldername.'/'.$newname;


      if($extension=='png' || $extension=='jpg' || $extension=='jpeg') { 
        compressImage($_FILES['docUpload']['tmp_name'][$i],$location,60); 
      } 
      else{ 
        move_uploaded_file($_FILES['docUpload']['tmp_name'][$i], $location); 
      }
    $uploadDoc=$newname;


    $dataupload[]=array(
         'upload_label'=>$uploadLabel,
         'upload_name'=>$uploadDoc,
         's_id'=>$last_id,
      );

 }


}

echo"<pre>";
print_r($dataupload);
$sqlUpload="INSERT INTO `tbl_uploadAll`(upload_label,upload_name,s_id) VALUES (:upload_label,:upload_name,:s_id)";
$stmt= $pdo->prepare($sqlUpload);
$stmt->execute($dataupload);

}

标签: phpmysql

解决方案


您正在传递数组数组

$stmt->execute($dataupload);

execute需要一个 key => value 的数组,其中 key 应该被命名为占位符。喜欢

$data = [
    'name' => $name,
    'surname' => $surname,
    'sex' => $sex,
];

因此,对于您的情况,您应该在 foreach 中执行

foreach ($dataupload as $row)
    {
        $stmt->execute($row);
    }

推荐阅读