如何在 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
我有一个使用 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