2015-10-04 30 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