如何使用PHP将数组插入mysql?

Bul*_*ulu 1 php mysql insert multidimensional-array

我有一个复杂的表格,有11列.至于行,根据学生人数的不同,他们的大小在20到50之间.我通过php scriptas数组捕获数据.每列产生一个数组.例如,从我有的表格fname[], lname[], exam_no[]等,所以当表格提交10行时,我最终得到11个数组,每个有10个条目,我通过一些php function来删除空元素.生成的阵列没有任何问题.

我想将这些数组中的数据插入到mysql循环中.基本上,lname array将为first name列提供所有first_name,lname array将提供db的last_name列,依此类推.

我只是无法开始构建MySQL query插入数据,我很熟悉'普通'插入,你有列和值,你已经知道将插入多少行,每个插入大多一行.

甚至可以MySQL Database Table使用PHP loop带有这么多列的插入来填充插入,并且可以灵活地插入任意数量的行,因为每次用户输入学生数据时这些行都会有所不同?

UPDATE

这就是我提出的.它工作但不是所希望的!

数组就像是$fname[], lname[]等等.然后我构建了主数组$master_array=array['$fname, $lname];

$sql = "INSERT INTO testing (date, fname, lname) VALUES ";
foreach($master_array as $subarray) {
   $sql .= "(NOW( )";
   echo 'A nested array: '.$subarray.'<br />';
   foreach($subarray as $value) {
      $sql .= ", '$value'";
      echo 'A Name: '.$value.'<br />';
   }
   $sql.= "), ";
}
$sql = substr($sql,0,-2); //removes extraneous , at end.
echo $sql;
$result=mysqli_query($dbc, $sql)
or die('Query Failed!');
?>
Run Code Online (Sandbox Code Playgroud)

由于我的查询涉及协调小段代码,我在构建之后打印它以查看要插入的内容.看起来像这样;

INSERT INTO table (date, fname, lname) VALUES (NOW( ), 'Andrew', 'Alex'), (NOW( ), 'Peterson', 'Marlon')
Run Code Online (Sandbox Code Playgroud)

我怀疑它会在第一行插入所有名字,在第二行插入所有姓氏.所需的结果是在名字列中插入名字,在第二个名字列中插入第二个名字.所以现在我需要一种方法将一个数组的所有元素插入到一个列中,然后移动到第二个数组并将其插入下一列.这听起来很复杂,我想知道它是否可行!让我受到php语言大师的教育,因为我是中间人,或者可能是全新的新手!

Ale*_*lec 5

是否更好地按学生分组信息?

例:

<form...>
<? foreach ($students as $id => $info) : ?>
  <input type="text" name="fname;<=$id;?>" value="<?=$info['fname'];?>" />
  <input type="text" name="lname;<=$id;?>" value="<?=$info['lname'];?>" />
  etc
<? endforeach ?>
</form>

(我在这里使用PHP短标签)

然后,当您处理表单时:

$update = array();

foreach ($_POST as $key => $value) {
  // key will look like: fname;1, fname;2, etc
  // so, split it on the ; sign to separate the field name from the student's id
  $data = explode(';',$key);

  // result:
  // $data[0] = fname, lname, etc
  // $data[1] = 1, 2, etc
  // you can add some checks to make sure that this field is valid
  // and that the id is in fact a valid id (number, > 0, etc)

  // sanitize data (however you want, just an example)
  $value = mysql_real_escape_string(trim($value));

  // now add it to the update array, grouped by student id
  $update[$data[1]][$data[0]] = $value;

  // result:
  // $update[1]['fname'] = 'First name student 1';
  // $update[1]['lname'] = 'Last name student 1';
  // $update[2]['fname'] = 'First name student 2';
  // $update[2]['lname'] = 'Last name student 2';
  // etc
}
Run Code Online (Sandbox Code Playgroud)

之后,浏览更新数组:

foreach ($update as $id => $info) {
  $sql = "UPDATE students
          SET fname = '".$info['fname']."', lname = '".$info['lname']."'
          WHERE id = $id";
  mysql_query($sql);
}
Run Code Online (Sandbox Code Playgroud)