如何在 while 循环中使用 curl 传递 DB table 值?

How to pass DB table values with curl in a while loop?

在下面的代码中,我试图为“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 with same order id ($row[order_id]) already exists","AWBNo":"$row[alternateno]"

但是如果我为 OrderNo (16445) 和 AWB (16445) 提供静态值,那么它工作正常:

"ReturnMessage":"successful","AWBNo":"16445"

看来我没有正确传递值,请指导我。

去掉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);

 ?>

您需要更改:

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

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

mysqli_fetch_row() 生成索引数组的数组。使用 order_id 的列索引 [0]alternateno[1] 访问结果集数据。在 $data.

中存储 $row[0]$row[1] 时,还必须删除单引号

现在,您的查询将返回 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);
}