我可以用php做多个更新SQL吗?

时间:2012-06-28 11:50:18

标签: php mysql

我想从我的数据库中编辑一个表。该表有很多数据。 我将展示样本。我是否需要编写许多mysql更新语句?还有其他方法只写一个语句吗?我是php的初学者?谢谢我所有的朋友。谢谢我的英语。

        mysql_query("UPDATE `mytablename` SET `mobiletitle` = '$mobiletitle1',
        `mobilepublished` = '1',
        `mobiletext` = '$mobilefulltext1',
         WHERE `id` ='$id1';");

           mysql_query("UPDATE `mytablename` SET `mobiletitle` = '$mobiletitle2',
        `mobilepublished` = '1',
        `mobiletext` = '$mobilefulltext2',
         WHERE `id` ='$id2';");

        mysql_query("UPDATE `mytablename` SET `mobiletitle` = '$mobiletitle3',
        `mobilepublished` = '1',
        `mobiletext` = '$mobilefulltext3',
         WHERE `id` ='$id3';");
   etc.............
        mysql_query("UPDATE `mytablename` SET `mobiletitle` = '$mobiletitle30',
        `mobilepublished` = '1',
        `mobiletext` = '$mobilefulltext30',
         WHERE `id` ='$id30';");

3 个答案:

答案 0 :(得分:1)

您希望使用特定数据更新一个表中的多个行,因此您必须逐个执行此错误....但您可以改进代码。如果我在哪里,我将创建一个函数,我只是称之为

function update_my_data($movilefilltex1,$id1){

mysql_query("UPDATE `mytablename` SET `mobiletitle` = '$mobiletitle1',
        `mobilepublished` = '1',
        `mobiletext` = '$mobilefulltext1',
         WHERE `id` ='$id1';");
.......


}

因此,要进行多次插入,您可以根据需要调用update_my_data(value1,valu2)。例如在一个循环中或者只在你需要的时候。

答案 1 :(得分:0)

如果UNIQUE上有id索引(如果它是PRIMARY KEY),则可以使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO mytablename (id, mobiletitle, mobilepublished, mobiletext) VALUES
  ('$id1', '$mobiletitle1', 1, '$mobilefulltext1'),
  ('$id2', '$mobiletitle2', 1, '$mobilefulltext2'),
  -- etc.
ON DUPLICATE KEY UPDATE
  mobiletitle     = VALUES(mobiletitle),
  mobilepublished = VALUES(mobilepublished)
  mobiletext      = VALUES(mobiletext);

请注意,如果新记录尚不存在,则会插入新记录;而你的多个UPDATE命令方法不会(它会引发错误)。

在任何一种情况下,您都可以在PHP中的循环中动态构建/执行SQL。

我还要提醒您,如果这些变量的内容超出您的控制范围,建议您考虑将变量作为参数传递给MySQL prepared statement尤其是。因为你可能容易受到SQL注入攻击)。如果您不知道我在说什么,或者如何解决它,请阅读Bobby Tables的故事。

将所有内容放在一起(使用PDO代替您正在使用的deprecated MySQL extension

for ($i = 1; $i <= 30; $i++) {
  $sqls[] = '(?, ?, 1, ?)';
  $arr[] = ${"id$i"};
  $arr[] = ${"mobiletitle$i"};
  $arr[] = ${"mobilefulltext$i"};
}

$sql = 'INSERT INTO mytablename (id, mobiletitle, mobilepublished, mobiletext)
        VALUES
   ' .    implode(',', $sqls)
     . 'ON DUPLICATE KEY UPDATE
          mobiletitle     = VALUES(mobiletitle),
          mobilepublished = VALUES(mobilepublished)
          mobiletext      = VALUES(mobiletext)';

$db = new PDO("mysql:dbname=$db", $user, $password);
$qry = $db->prepare($sql);
$qry->execute($arr);

请注意,您也可以考虑在arrays中存储1..30变量。

答案 2 :(得分:-1)

update table1,table2 SET table1.column1 = 'valueX',table2.coulumn2 = 'valueX' where table1.column = table2.coulumn2 ;