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

How to update multiple data with implode in PHP

我有一个使用 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());
}

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

不要使用 implode...只是做

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

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

A very server resources friendly method to update multiple rows in the same table is by using WHEN THEN (with a very important note).

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

The note is: do not forget ELSE. If you do not use it, all rows that are outside the range of your updated values will be set to blank!

(添加了强调和格式。)


基于此,您可以使用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 扩展已被弃用,不再维护。这些天你应该使用 MySQLi or PDO