Как передать значения таблицы БД с помощью curl в цикле while? - PullRequest
0 голосов
/ 16 ноября 2018

В приведенном ниже коде я пытаюсь передать значения динамически для " OrderNo & AWB ".

$sql="SELECT order_id , alternateno FROM do_order";

$con=mysqli_connect("localhost","root","","do_management");

if ($result=mysqli_query($con,$sql))
{
    while ($row=mysqli_fetch_row($result))
    {
        $data = 
            array (
                'OrderNo' => '$row[order_id]', 
                'ManifestDetails' => 
                    array (
                        'AWB' => '$row[alternateno]',    
                        'PaymentStatus' => 'COD',   
                    ),
                );
    }
    mysqli_free_result($result);
}

mysqli_close($con);

$url = "http://1234.1234.1234.1234";
$data = json_encode($data);

$curl = curl_init($url);
$curl_response = curl_exec($curl);
curl_close($curl);
echo $curl_response ."\n";

Каждый раз, когда я вызываю URL в браузере, его сообщение отображается ниже сообщения об ошибке:

«ReturnMessage»: «AWB no с таким же идентификатором заказа ($ row [order_id]) уже существует», «AWBNo»: «$ row [alternateno]»

Но если я дам статические значения для OrderNo (16445) и AWB (16445), то все будет работать нормально:

"ReturnMessage": "успешный", "AWBNo": "16445"

Так что, похоже, я не передаю значения должным образом, пожалуйста, объясните мне это.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Вам нужно изменить:

array (
  'OrderNo' => '$row[order_id]', 
  'ManifestDetails' => 
  array (
    'AWB' => '$row[alternateno]',    
    'PaymentStatus' => 'COD',   
  ),
);

Для

array (
  'OrderNo' => $row['order_id'], 
  'ManifestDetails' => 
  array (
    'AWB' => $row['alternateno'],    
    'PaymentStatus' => 'COD',   
  ),
);
0 голосов
/ 16 ноября 2018

mysqli_fetch_row() создает массив индексированных массивов. Получите доступ к данным набора результатов, используя индексы столбцов [0] для order_id и [1] для alternateno. Вы также должны удалить одинарные кавычки при хранении $row[0] и $row[1] в $data.

Прямо сейчас ваш запрос будет возвращать результирующий набор из n строк. ваш while() цикл будет перезаписывать, перезаписывать и перезаписывать $data и сохранять только данные строки последней итерации.

Если вы хотите сохранить все данные строк в $data, напишите $data[], чтобы вставить новые данные строк в массив $data.

непроверенный код:

if (!$con = mysqli_connect("localhost", "root", "", "do_management")) {
    echo "connection error";
} elseif (!$result = mysqli_query($con, "SELECT order_id, alternateno FROM do_order")) {
    echo "query error";
} else {
    $url = "http://114.143.206.69:803/StandardForwardStagingService.svc/AddManifestDetails";
    while ($row = mysqli_fetch_row($result)) { // fetch_row does not generate associative keys
        $data = [
            'OrderNo' => $row[0], 
            'ManifestDetails' => ['AWB' => $row[1], 'PaymentStatus' => 'COD']
        ];

        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_VERBOSE, true);

        $curl_response = curl_exec($curl);
        curl_close($curl);
        echo $curl_response ."\n";
    }
    mysqli_free_result($result);
}
0 голосов
/ 16 ноября 2018

Удалите кавычки order_id и alternateno и попробуйте

<?php

$sql="SELECT order_id , alternateno FROM do_order";

$con=mysqli_connect("localhost","root","","do_management");

if ($result=mysqli_query($con,$sql))
{
 while ($row=mysqli_fetch_row($result))
 {
  $data = 
  array (
      'OrderNo' => $row['order_id'], 
      'ManifestDetails' => 
         array (
           'AWB' => $row['alternateno'],    
           'PaymentStatus' => 'COD',   
               ),
        );
   }
  mysqli_free_result($result);
 }

 mysqli_close($con);

 ?>
...