我是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';
我根本不知道如何获取多位动态数据并将其全部更新。有人能指出我正确的方向吗?我意识到我需要将它们放入数组中,但我只是不知道如何。
提前谢谢。
答案 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中按不同的条件更新不同的行。