0

我对 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';      

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

先感谢您。

4

3 回答 3

0

As per your query

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

id column is varchar and not int and also you have not specified what to store in sortorder.

I am giving solution considering following queries

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

in that case you should query like :

UPDATE photos SET sortorder = id;

if sortorder is int and id is varchar then query should be

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

and if you want to update for some specific values only then it should be like

UPDATE photos SET sortorder = CAST(id as unsigned) where id in ('1','2','3');
于 2013-10-28T14:42:34.143 回答
0

假设您有 ID 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 中编写的方式,但想法是遍历数组并将这些值带入您的查询中。

于 2013-10-28T14:40:09.730 回答
0

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

于 2013-10-28T14:48:41.630 回答