使用php中的implode更新数据

时间:2015-10-04 07:49:52

标签: php mysql

请帮帮我,抱歉我的英语不好, 我根据要更新行的数据获取数据, 按照我的代码

我获取数据以连接API参数

$stmt->prepare( "SELECT offer_id FROM " ."affilate_offer_getthumbnail_icube ORDER BY 'offer_id' ASC");
$stmt->execute();
mysqli_stmt_execute($stmt); // <--------- currently missing!!!
mysqli_stmt_store_result($stmt); 
$rows = mysqli_stmt_num_rows($stmt);
$stmt->bind_result($offer_id);
$sqlimplode = implode(',', $sql);
if($rows>0)
   { 

        $query = "UPDATE affilate_offer_getthumbnail_icube WHERE offer_id='".$offer_id."' SET '".$sqlimplode."'"; 
         $stmt->prepare( $query);
 $execute = $stmt->execute();
   }
   else
   {
        $query= "INSERT INTO affilate_offer_getthumbnail_icube(offer_id, net_provider,logo2020,logo100) VALUES".$sqlimplode;
         $stmt->prepare( $query);
 $execute = $stmt->execute();
  }`
`

因为我存储了必须在'sql'中插入的值 现在

var app = {
    initialize: function() {
        this.bindEvents();
    },bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },onDeviceReady: function() {
        // Grab the template script
      var theTemplateScript = $("#address-template").html();

      // Compile the template
      var theTemplate = Handlebars.compile(theTemplateScript);

      // Define our data object
      var context={
        "city": "London",
        "street": "Baker Street",
        "number": "221B"
      };

      // Pass our data to the template
      var theCompiledHtml = theTemplate(context);

      // Add the compiled html to the page
      $('.content-placeholder').html(theCompiledHtml);
    }
};

插入查询效果很好,但如何更新所有数据,如插入查询?

4 个答案:

答案 0 :(得分:2)

我的回答是指一个&#34;设置并忘记&#34; -strategy。我不想首先寻找现有的行 - 可能使用PHP。我只是想创建正确的SQL命令并发送它。

有几种方法可以更新已输入(或缺失)的数据。首先,您应该更改表以设置特定于问题的UNIQUE-Key。这为您的表设置了更多的智能,以检查已经插入的数据。以下更改意味着在此UNIQUE-set列中不能有两次具有相同值的第二行。 如果发生这种情况,您将收到一些错误或特殊行为。 a busy cat

您可以使用此命令将列设置为唯一:而不是使用PHPMyAdmin:

ALTER TABLE `TestTable` ADD UNIQUE(`tablecolumn`);

使用此附加智能设置表后,您可以稍微更改Insert-Command:

您可以删除并覆盖您的Datarow而不是Insert REPLACE

$query= "REPLACE INTO affilate_offer_getthumbnail_icube 
(offer_id, net_provider,logo2020,logo100) VALUES (".$sqlimplode.")";

请参阅:Replace Into Query Syntax

其次,您可以使用&#34; On Duplicate Key&#34; -Commando。

https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

$query= "INSERT INTO affilate_offer_getthumbnail_icube 
(offer_id, net_provider,logo2020,logo100) 
VALUES (".$sqlimplode.") 
ON DUPLICATE KEY UPDATE net_provider = ".$newnetprovider.", 
                        logo2020 = ".$newlogo2020.", 
                        logo100 = ".$newlogo100.";";

注意:我想你错过了$ sqlimplode周围的一些(和)。我总是把它们放在你的内心。也许你错过了&#39; &#39;围绕字符串。

答案 1 :(得分:0)

$ ./bin/gwtest world[ 0][ 0] : 0 world[ 0][ 1] : 1 world[ 0][ 2] : 2 world[ 0][ 3] : 0 world[ 0][ 4] : 1 world[ 0][ 5] : 2 world[ 0][ 6] : 0 world[ 0][ 7] : 1 world[ 0][ 8] : 2 world[ 0][ 9] : 0 world[ 1][ 0] : 1 world[ 1][ 1] : 2 world[ 1][ 2] : 0 world[ 1][ 3] : 1 world[ 1][ 4] : 2 world[ 1][ 5] : 0 world[ 1][ 6] : 1 world[ 1][ 7] : 2 world[ 1][ 8] : 0 world[ 1][ 9] : 1 world[ 2][ 0] : 2 ... world[ 8][ 8] : 1 world[ 8][ 9] : 2 world[ 9][ 0] : 0 world[ 9][ 1] : 1 world[ 9][ 2] : 2 world[ 9][ 3] : 0 world[ 9][ 4] : 1 world[ 9][ 5] : 2 world[ 9][ 6] : 0 world[ 9][ 7] : 1 world[ 9][ 8] : 2 world[ 9][ 9] : 0 查询的语法是

UPDATE

因此,您无法将您的内爆数组$ sql传递给UPDATE table SET field1 = value1, field2 = value2 ... 查询。您必须为UPDATE查询生成另一个sql-string。

答案 2 :(得分:0)

这显然不正确:

 $query = "UPDATE affilate_offer_getthumbnail_icube 
 WHERE offer_id='".$offer_id."' SET '".$sqlimplode."'"; 

如果打算INSERT offer_id='".$offer_id."'然后UPDATE ... SET offer_id = '".$sqlimplode."'";

您必须使用两个单独的查询,一个用于INSERT,另一个用于UPDATE

一个例子:

 $query = "INSERT INTO affilate_offer_getthumbnail_icube 
 (col_name) VALUES('".$col_Value."')";
 //(execute it first);

$query2 = "UPDATE affilate_offer_getthumbnail_icube SET 
     col_name= '".$col_Value."'" WHERE if_any_col = 'if_any_Value';
 //(execute this next);

答案 3 :(得分:0)

试试这个:

$sqlimplode = implode(',', $sql);
if($rows>0)
   { 
        /*$fields_values = explode(',',trim(array_shift($sql), "()"));
        $combined_arr = array_combine(['offer_id','net_provider','logo2020','logo100'],$fields_values);
        $sqlimplode = implode(', ', array_map(function ($v, $k) { return $k . '=' . $v; }, $combined_arr, array_keys($combined_arr))); */
        $query = "INSERT INTO affilate_offer_getthumbnail_icube(offer_id, net_provider,logo2020,logo100) VALUES".$sqlimplode." ON duplicate key update net_provider = values(net_provider),logo2020 = values(logo2020),logo100 = values(logo100)"; 
         $stmt->prepare( $query);
 $execute = $stmt->execute();
   }
   else
   {
        $sqlimplode = implode(',', $sql);
        $query= "INSERT INTO affilate_offer_getthumbnail_icube(offer_id, net_provider,logo2020,logo100) VALUES".$sqlimplode;
         $stmt->prepare( $query);
 $execute = $stmt->execute();
  }