【问题标题】:How to update a database table data from an PHP array?如何从 PHP 数组更新数据库表数据?
【发布时间】:2019-05-22 19:54:01
【问题描述】:

我需要从一个php数组更新一个mysql表数据库的信息。

我正在寻找执行此操作的最佳方法,我想做的是使用新信息更新现有数据库表,这意味着可能会有新行,现有行可能在其字段中具有新值,或删除的行。

我正在考虑的方法是:

  1. 从当前表中删除所有数据和行,并再次插入所有包含 php 数组提供的最新数据的行。但我不知道这是一种昂贵的方法还是确实被使用了。
  2. 我的另一个想法是,也许我可以检查行中的字段值是否已更改,如果是则更新值,还检查行的顺序以检查是否删除了某些行以及订单已更改,如果是这种情况,最后插入新行,但我认为这会变得非常棘手和混乱。

你怎么看?一些更好的方法的想法? 感谢您的支持。

【问题讨论】:

    标签: php mysql database sql-update


    【解决方案1】:

    您可以使用INSERT ... ON DUPLICATE KEY UPDATEINSERT 新行和UPDATE 现有行。

    示例:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE a=1,b=2,c=3;
    

    您必须使用 php 中的一些技巧来构建 DELETE 语句。

    示例:

    <?php
    
    $data = array(
        array( 'a'=>1, 'b'=>2, 'c'=>3 ),
        array( 'a'=>4, 'b'=>5, 'c'=>6 ),
        array( 'a'=>7, 'b'=>8, 'c'=>9 ),
    );
    
    $condition = implode( ',', array_map( function($temp){return sprintf("('%s','%s','%s')",$temp['a'],$temp['b'],$temp['c']);},$data));
    $sql = "DELETE FROM t1 WHERE (a,b,c) NOT IN (" . $condition . ");";
    echo $sql; // DELETE FROM t1 WHERE (a,b,c) NOT IN (('1','2','3'),('4','5','6'),('7','8','9'));
    
    // OR
    
    $condition1 = implode( ',', array_map( function($temp){return sprintf("'%s'",$temp['a']);},$data));
    $sql1 = "DELETE FROM t1 WHERE a NOT IN (" . $condition1 . ");";
    echo $sql1; // DELETE FROM t1 WHERE a NOT IN ('1','4','7');
    
    ?>
    

    【讨论】:

    • 非常感谢,现在我已经清楚插入和更新了。现在我将分析删除部分:) ;)
    【解决方案2】:

    DBMS 可以为您做到这一点。只需使用命令:

      'INSERT INTO table ({target list}) VALUES({values}) ON DUPLICATE KEY UPDATE val1={value} , val2={value},...'
    

    【讨论】:

    • 谢谢,亚历山德罗阿梅代。如果行被删除,是否考虑到这也会添加新行?或者我将不得不执行你所说的更新值的指令,然后插入新行?
    • 非常感谢您的回答,一路有光嘿嘿@alessandroAmedei
    • 如果该行不在表中,该命令将添加一行,否则将更新该行。我认为在您的 php 数组中,您知道要删除的数据的主键在哪里。在这种情况下,只需使用命令 DELETE
    • 如果删除了一行,它就不会在php数组中,所以我必须在表中检测到我要更新的行不再存在,然后删除它。跨度>
    • 好的,如果你想“保存”你删除的所有行,我猜你需要另一个表。
    猜你喜欢
    • 2019-08-21
    • 2014-04-04
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2012-03-22
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多