2015-10-04 2 views
2

пожалуйста, помогите мне и простите за мой плохой английский, У меня есть выборки данных, на основе этих данных, я хочу, чтобы обновить строки, Следит мой кодобновление данных с использованием взрываться в PHP

Я принес данные для подключения Parameters 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-ключ. Это создает немного больше информации для вашей таблицы, чтобы проверить уже вставленные данные самостоятельно. Следующее изменение означало, что во втором столбце UNIQUE не может быть второй строки с одинаковым значением дважды. Если это произойдет, вы получите ошибку или особое поведение. a busy cat

Вместо использования PHPMyAdmin вы можете использовать эту команду, чтобы установить столбец уникальный:

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

После настройки таблицы с этой дополнительной разведки, вы изменяете Добавленное-Command немного:

Вместо вставки вы можете удалить и перезаписать DataRow с 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, но значения одного и того же идентификатора предложения могут отличаться, а затем отображать. – 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 запроса. Вы должны сгенерировать еще одну sql-строку для запроса UPDATE.

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

когда я эхо $ query = "UPDATE affilate_offer_getthumbnai l_icube WHERE offer_id = '". $ Offer_id. "' SET ' ». $ sqlimplode. "'"; output будет 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 "'для предложения id 12, но поскольку есть две строки, содержащие предложение id 2, 12, тогда o/p должен быть двумя операциями обновления 1 для 2, а другой для 12 – nehaJ

+0

Я обновил свой пост (в случае необходимости) – RomanPerekhrest

Смежные вопросы