2015-04-23 2 views
0

Я действительно хочу обновить mysql с выходом в том же порядке. У меня есть db, где некоторые данные уже присутствуют и там sendondate является обычным явлением. Я попытался обновить, но только обновил последний вывод только не всей последовательности. Пожалуйста, помогите мне с этим ..update json result in mysql последовательно

<?php 
    $data = '[{"message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DND","sendondate":"2015-04-23 12:27:00","provider":"aaaa"},{"message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DELIVERD","sendondate":"2015-04-23 12:27:00","provider":"aaaa"}]'; 


     // $objs = json_decode($data); 
    $con=mysqli_connect("localhost","root","Password*9","sms9"); 
     $objs = json_decode($data,true); 
     foreach ($objs as $obj){ 
      $repor = $obj['messageStatus']; 
      // echo $repor . '<br />'; 
      $sen= $obj['sendondate']; 
      //echo $sen; 

      $repor=array(); 
      while($row = mysql_fetch_array($repor)) 
     { 
      $sql2= "Update detail SET Delivery='$repor' WHERE Datetime='$sen'"; 
    if(mysqli_query($con, $sql2)){ 
      echo "up"; 
      } 
     } 

     } 

    ?> 

ответ

0

Просто удалите $repor=array() и условие while (я не могу видеть, что было это назначение):

<?php 

$data = '[ 
    {"message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DND","sendondate":"2015-04-23 12:27:00","provider":"aaaa"}, 
    {"message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DELIVERD","sendondate":"2015-04-23 12:27:00","provider":"aaaa"} 
]'; 

// $objs = json_decode($data); 
$con = mysqli_connect("localhost","root","Password*9","sms9"); 
$objs = json_decode($data,true); 

foreach ($objs as $obj) { 
    $repor = $obj['messageStatus']; 
    // echo $repor . '<br />'; 
    $sen = $obj['sendondate']; 
    //echo $sen; 

    $sql2 = "Update detail SET Delivery='$repor' WHERE Datetime='$sen'"; 
    if (mysqli_query($con, $sql2)) { 
     echo "up"; 
    } 
} 

Обновление на основе ваш комментарий:

В sql, если вы хотите изменить определенные строки, вы должны сопоставить их, используя правильные условия. Как правило, не рекомендуется выбирать строки на основе неисторических столбцов, таких как datetime. Таким образом, если вы можете изменять как вашей БД и JSON данные, обычный способ определить какой-то идентификатор (обычно целое число):

$data = '[ 
    {"id": 123, "message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DND","sendondate":"2015-04-23 12:27:00","provider":"aaaa"}, 
    {"id": 666, "message":"Hello+Test+Message","sender":"test","billcredit":"0.00","messageStatus":"DELIVERD","sendondate":"2015-04-23 12:27:00","provider":"aaaa"} 
]'; 
... 
    $id = $obj['id']; 
    ... 
    $sql2 = "Update detail SET Delivery='$repor' WHERE id=$id"; 

Или, если вы не можете добавить дополнительные столбцы, вы должны добавить один уже определенного для различения строк с тем же самым дат-временем, например отправителя (значения отправителя должны отличаться для записей, чтобы различать их, что не относится к вашим данным json sample, но это только пример использования):

... 
    $sender = $obj['sender']; 
    ... 
    $sql2 = "Update detail SET Delivery='$repor' WHERE Datetime='$sen' AND sender='$sender'"; 

Extra наконечник безопасности: Как правило, вы должны Prope rly escape данные перед отправкой на db, чтобы предотвратить sql injection. В качестве альтернативы вы можете использовать prepared statements с binded parameters.

+0

Я также пытаюсь удалить то же, что вы упоминаете, но оно берет только последнее значение хранится в $ repor. Я не могу сохранить все значения $ repor последовательно. @Honza Haering – Seego

+0

В данных json у вас есть то же самое «sendondate» для обеих записей. Поэтому предложение where выбирает одну и ту же запись в db. Сначала db обновляет столбец «Доставка» до «DND», а затем заменяет его «DELIVERD». Оба в той же строке в db с Datetime = '2015-04-23 12:27:00'. Вопрос в том, что вы хотите иметь в db после этих обновлений? Две записи, одна с «DND» и одна с «DELIVERD»? –

+0

он будет вычитать кредит .. Думаю, я не смог заставить вас понять. Я отправил sms на два номера. Поэтому в то же время сообщение будет вставлено в db. Теперь у меня есть два indentical sendondate в одной таблице. После того, как я получил json после доставки, мне нужно обновить статус на обоих числах. Теперь проблема заключается в том, что она обновляется с таким же статусом, что и не соответствующий статус. Поэтому, пожалуйста, помогите мне .. @Honza Haering – Seego