如何在 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);
}
在下面的代码中,我试图为“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);
}