2015-10-04 48 views
2

请帮我和我的英语不好对不起, 我有获取数据,这些数据我想更新行的基础上, 跟随我的代码更新使用PHP破灭数据

我拿来数据连接API参数

<?php 


$stmt = $db->stmt_init(); 
       /* publish store for icube*/ 
    $stmt->prepare("SELECT id,offer_id,name,net_provider,date,visible,apikey,networkid FROM " ."affilate_offer_findall_icube WHERE visible='1' "); 
    $stmt->execute(); 
    mysqli_stmt_execute($stmt); // <--------- currently missing!!! 
mysqli_stmt_store_result($stmt); 
$rows = mysqli_stmt_num_rows($stmt); 
    $stmt->bind_result($id, $offer_id, $name, $net_provider, $date, $visible,$apikey,$networkid); 
    $sql = array(); 
    if($rows>0) 
    { 

    while($info = $stmt->fetch()) { 
$jsondataicube = file_get_contents('filename/json?NetworkId='.$networkid.'&Target=Affiliate_Offer&Method=getThumbnail&api_key='.$apikey.'&ids%5B%5D='.$offer_id.''); 
      $dataicube = json_decode($jsondataicube, true); 
foreach($dataicube['response']['data'][0]['Thumbnail'] as $key=>$val) 
      { 
       $offer_id = $dataicube['response']['data'][0]['Thumbnail']["$key"]['offer_id']; 
       $display = $dataicube['response']['data'][0]['Thumbnail']["$key"]['display']; 
       $filename = $dataicube['response']['data'][0]['Thumbnail']["$key"]['filename']; 
       $url = $dataicube['response']['data'][0]['Thumbnail']["$key"]['url']; 
      $thumbnail = $dataicube['response']['data'][0]['Thumbnail']["$key"]['thumbnail']; 
      $_filename = mysqli_real_escape_string($db,$filename); 
        $_url = mysqli_real_escape_string($db,$url); 
       $_thumbnail = mysqli_real_escape_string($db,$thumbnail); 
$sql[] = '("'.$offer_id.'","icube","'.$_thumbnail.'","'.$_url.'")'; 

      } 
     } 

正如我存储具有在 'SQL' 被插入的值 现在

$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(); 
    }` 
` 

插入查询工作正常,但是如何更新插入查询等所有数据?

+0

你是什么意思'更新状插入query'做? –

回答

2

我的答案指的是“一劳永逸”的策略。我不想先查找现有的行 - 可能使用PHP。我只是想创建正确的SQL命令并发送它。

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

而不是使用phpMyAdmin,你可以使用这个命令来设置唯一的列:

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

你的表设置了这个附加的智能后,会改变你的插入命令一点点:

而是插入,你可以放下,并与 REPLACE覆盖您的数据行:

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

请参阅:Replace Into Query Syntax

其次,您可以使用“On Duplicate Key”-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错过了一些(和)。我总是把它们放在你的内心。也许你错过了''字符串以及。

+0

工作完美。非常感谢您。 – nehaJ

+0

但我再次有一个查询,如果我把唯一的键提供ID,但同一个offer ID的值可能不同,那么它应该显示。 – nehaJ

+0

在每种情况下,您必须指定数据行中必须是唯一的。您可以将ONE列指定为唯一或更多列。一个例子:你可以告诉你的表,只能有不同的名字。然后你插入一些行,如'ID = 1','name = nehaJ','year = 2000'。后来你插入'ID = 23','name = nehaJ','year = 2005'。然后你会替换或更新旧的ID = 1可能会被删除。多个示例:如果您将表格UNIQUE设置为NAME + YEAR,那么您的表格中将有ID = 1和ID = 23。因为nehaJ + 2000不等于nehaJ + 2005。回答? – Nibbels

0

UPDATE查询语法是

UPDATE table SET field1 = value1, field2 = value2 ... 

所以,你不能通过你的内爆数组$ SQL来UPDATE查询。您必须为UPDATE查询生成另一个sql字符串。

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); 
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(); 
    } 
+0

谢谢你的答案,但它只打印1个值,因为有多行 – nehaJ

+0

当我echo $ query =“更新affilate_offer_getthumbnai l_icube WHERE offer_id ='”。$ offer_id。“'SET' ”。$ sqlimplode。 “'”;输出变成UPDATE affilate_offer_getthumbnail_icube WHERE offer_id = '12'SET'offer_id =“2”,net_provider =“icube”,logo2020 =“http://media.icubeswire.com/brand/files/icubes/2/thumbnails_100/jabong-logo .jpg“,logo100 =”http://media.icubeswire.com/brand/files/icubes/2/jabong-logo.jpg“,对于优惠编号12,但由于有两行包含优惠编号2,12,则o/p应该是两个更新语句1是2和另一个是12 – nehaJ

+0

我已更新我的文章(如有需要) – RomanPerekhrest