我有一个用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());
}
但是如何使用它来更新行值?
答案 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
答案 1 :(得分:0)
不要使用内爆...只是做
$sql="UPDATE tb_client_table_rows SET full_name=$full_name WHERE id_table=$id_table";