如何在PHP中使用implode更新多个数据

时间:2015-11-28 21:31:14

标签: php mysql implode

我有一个用implode方法在PHP中插入多个数据的脚本,但我不知道如何在UPDATE语法中使用它。

<input type="text" name="field_name" value="unyil"/>

使用PHP这样:

foreach($_POST['id_table'] as $row=>$id_table)
{
    $id_table=$id_table;
    $full_name=$_POST['full_name'][$row];

    $query_row[] = "('$id_table','$full_name')";
}

$sql="INSERT INTO tb_client_table_rows (id_table, full_name) VALUES " . implode(',',$query_row); 

if (!mysql_query($sql))
{
    die('Error: ' . mysql_error());
}

但是如何使用它来更新行值?

2 个答案:

答案 0 :(得分:1)

Mohamed Hossam在对MySQL reference manual的评论中发布了以下内容:

  

使用WHEN THEN(非常重要的注意事项)更新同一个表中的多行的服务器资源友好方法。

UPDATE tbl_name SET fld2 = CASE fld1
WHEN val1 THEN data1
WHEN val2 THEN data2
ELSE fld2 END
     

说明是:不要忘记ELSE 。如果您不使用它,那么超出更新值范围的所有行都将设置为空白!

(增加了重点和格式。)

基于此,您可以使用implode构建具有多个值的UPDATE查询:

<?php

  /* Sample data: */

  $_POST['id_table'] = array ('1746', '1834', '1944');
  $_POST['full_name'] = array ('lumbar', 'bezoar', 'sniggle');

  /* Code */

  foreach($_POST['id_table'] as $row=>$id_table)
  {
    /* Don't forget to escape data to avoid SQL injection */

    $id_table  = mysql_real_escape_string ($id_table);
    $full_name = mysql_real_escape_string ($_POST['full_name'][$row]);

    $query_row[] = "'$id_table' THEN '$full_name'";
  }

  $query = "UPDATE tb_client_table_rows\n"
         . "   SET full_name = CASE id_table\n"
         . "                     WHEN "

         . implode ("\n                     WHEN ", $query_row) 

         . "\n                     ELSE full_name\n"
         . "                   END";

  echo "$query\n";

输出:

UPDATE tb_client_table_rows
   SET full_name = CASE id_table
                     WHEN '1746' THEN 'lumbar'
                     WHEN '1834' THEN 'bezoar'
                     WHEN '1944' THEN 'sniggle'
                     ELSE full_name
                   END

请注意,MySQL扩展已被弃用,不再维护。这些天你应该使用MySQLiPDO

答案 1 :(得分:0)

不要使用内爆...只是做

$sql="UPDATE tb_client_table_rows SET full_name=$full_name WHERE id_table=$id_table";