通过PHP更新多个MYSQL行

时间:2013-10-28 14:35:56

标签: php mysql

我是PHP的新手,我知道基础知识但不确定如何在PHP中一次更新多行?形式类似于:

<form action="sortorder.php" id="sortorder">

<input style='width:20px;' type='text' name='photo' value='1'>
<input style='width:20px;' type='text' name='sortorder' value='1'>

<input style='width:20px;' type='text' name='photo' value='2'>
<input style='width:20px;' type='text' name='sortorder' value='2'>

<input style='width:20px;' type='text' name='photo' value='3'>       
<input style='width:20px;' type='text' name='sortorder' value='3'>

</form>

我需要对每个

应用类似的代码
UPDATE photos SET sortorder = <input> WHERE id = '1';
UPDATE photos SET sortorder = <input> WHERE id = '2';      

我根本不知道如何获取多位动态数据并将其全部更新。有人能指出我正确的方向吗?我意识到我需要将它们放入数组中,但我只是不知道如何。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

让我们说你有1,2,3,4。 你可以这样做:

UPDATE photos SET sortorder = <yourvalue> WHERE id IN (1,2,3,4);

现在,您可以动态生成要更新的值,而不是显式编写IN (1,2,3,4)。这可以通过PHP或通过SQL:

UPDATE photos SET sortorder = <yourvalue> 
WHERE id IN 
(SELECT id from anotherTable WHERE otherattribute = someotherValue);

您应该注意,只有文字必须在'中 - 必须在没有编号的情况下编写!对于您的示例,我假设id是数字而不是文本 - 如果它确实是文本(或char / varchar),则需要编写... IN ('1','2','3','4')。但我会建议你使用整数作为你的ID。

更新: 要获取输入的特定值,您可以执行以下操作:

<input ... name='photo[]' value='1' />
<input ... name='sortorder[]' value='1' />

这样,您在发送表单时会获得两个数组:$_POST[photo]$_POST[sortorder]

现在迭代它们(对不起,如果语法不正确,很长时间没有使用PHP,但想法应该清楚):

for($i = 0; $i < photo.length; $i++){
    // your query here
    // something like:
    UPDATE photos SET sortorder = sortorder[i] WHERE id = photo[i];
    // of course you have to sanitize your input!
}

正如我所说的那样:我不确定你是否真的会用PHP编写这个,但我们的想法是通过数组并将这些值带入你的查询。

答案 1 :(得分:0)

根据您的查询

UPDATE photos SET sortorder = WHERE id = '1';
UPDATE photos SET sortorder = WHERE id = '2';

id列是varchar而不是int,并且您还没有指定要在sortorder中存储的内容。

我正在考虑以下问题给出解决方案

UPDATE photos SET sortorder = '1' WHERE id = '1';
UPDATE photos SET sortorder = '2' WHERE id = '2';

在这种情况下,你应该查询:

UPDATE photos SET sortorder = id;

如果sortorder为int且id为varchar,则查询应为

UPDATE photos SET sortorder = CAST(id as unsigned);

如果您只想更新某些特定值,那么它应该像

UPDATE photos SET sortorder = CAST(id as unsigned) where id in ('1','2','3');

答案 2 :(得分:0)

它接缝你想使插入sql更有效。但实际上,每次更新一行ID会缩短锁定时间并有助于提高并发能力。另一方面,没有办法在一个sql中按不同的条件更新不同的行。