我遇到了一个问题,我试图在查询中运行查询。我正在使用一个php脚本,该脚本将进行api调用以将跟踪详细信息更新到eBay上以获取销售记录。

它的工作方式是,它首先在表上对所有未完成的记录进行选择。然后对于第一条记录,它将进行api调用,然后在响应中获得ack。如果确认成功,它将更新完成的销售,并插入日志记录。如果失败,它将不会更新记录,并再次插入日志记录。然后它将移至下一个记录并重复相同的操作,以此类推。

现在,当我去运行它时,我收到消息“命令不同步;您现在不能运行此命令”。这仅在第二个销售记录和之后的任何记录上发生。

我尝试关闭连接和free_result,但似乎没有任何效果。

我本来想将所有销售额存储在一个数组中,但是如果这很明智或可能,我就不会。

我注意到这个post有一个解决方案,但是我似乎无法将其应用于我的方案。请任何帮助将不胜感激!

这是我的代码:

<?php
echo "Start update of sales";

//Database query for pending orders
$servername = "localhost";
$username = "XXX";
$password = "XXXX";
$dbname = "XXXX";
$conn = mysqli_connect($servername, $username, $password, $dbname);
//Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT ss.`item_id`, ss.`transaction_id`, ss.`tracking_number` FROM `sales_table` ss WHERE ss.`completed`<> 1";
$result = mysqli_query($conn, $query) or die(mysql_error());
while($row = mysqli_fetch_array($result)){
echo $row['transaction_id']. " - ". $row['item_id'];
echo "<br />";
$tranid = $row['transaction_id'];
echo $tranid;

///Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8"?>';
$requestXmlBody .= '<CompleteSaleRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
...
$requestXmlBody .= '</CompleteSaleRequest>';

//Create a new eBay session
$session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);
//send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
//print $responseXml;
PrintUtils::printXML($responseXml);
$xml = simplexml_load_string($responseXml);

foreach ($xml->Ack as $Ack) {
        echo "Status: ".$Ack ."<br>";

        { $sql = "UPDATE `sales_table` SET `completed`=1, `completed_date`=now(), `update_date`=now() where `transaction_id`='$tranid' and `item_id`='$itemid';";
          $sql .= "INSERT INTO `sales_log` (`item_id`, `transaction_id`, `status`, `short_desc`, `long_desc`, `log_date`) VALUES ('$itemid', '$tranid', '$Ack', '$Ack', '$Ack', CURRENT_TIMESTAMP);";
    }}

    if (mysqli_multi_query($conn, $sql)){

    echo "New record created successfully <br>";
        } else {
            echo "Error inserting records. " . $sql ."<br>" . mysqli_error($conn);
        }}
mysqli_free_result($result);mysqli_close($conn);?>


我仍然在学习PHP,因此可以提供任何帮助。

最佳答案

这是怎么做的?

$rows=array();
if($result=mysqli_query($conn,$query)){
    while(($rows[]=mysqli_fetch_assoc($result)) || array_pop($rows));
    mysqli_free_result($result);
}else{
    die(mysqli_error($conn));
}

foreach($rows as $row){
    $tranid=$row['transaction_id'];
    echo $row['transaction_id']." - ".$row['item_id']."<br>";

    //Build the request Xml string
    //Create a new eBay session
    //send the request and get response
    //print $responseXml;

    $sql=array();
    foreach($xml->Ack as $Ack){
        echo "Status: ".$Ack."<br>";
        $sql["Update"]="UPDATE `sales_table` SET `completed`=1, `completed_date`=now(), `update_date`=now() where `transaction_id`='$tranid' and `item_id`='$itemid'";
        $sql["Insert"]="INSERT INTO `sales_log` (`item_id`, `transaction_id`, `status`, `short_desc`, `long_desc`, `log_date`) VALUES ('$itemid', '$tranid', '$Ack', '$Ack', '$Ack', CURRENT_TIMESTAMP)";
    }

    if(mysqli_multi_query($conn,implode(';',$sql))){
        do{
            list($current_key,$current_query)=each($sql);   //advances array pointer to first or next element
            if(mysqli_affected_rows($conn)<1){
                echo "Query logic error @ $current_key where TranID=$tranid & Ack=$Ack<br>";
            }else{
                echo "New record created where TranID=$tranid & Ack=$Ack<br>";
            }
        } while(mysqli_more_results($conn) && mysqli_next_result($conn));
    }else{
        list($current_key,$current_query)=each($sql);   //advances array pointer to first element
    }
    if($error_mess=mysqli_error($conn)){
        echo "Query syntax error @ $current_key where TranID=$tranid & Ack=$Ack<br>$error_mess<br>";
    }
    $error_mess=""; // clear for next iteration
}
mysqli_close($conn);

关于php - 使用PHP在查询中运行查询时命令不同步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28941710/

10-09 08:20
查看更多