Мне кажется, проблема, когда я пытаюсь запустить запрос в запросе. Я использую php-скрипт, который сделает api-звонок для обновления данных отслеживания в ebay для продажи записей.Команда из Sync при запуске запроса внутри запроса с PHP
Способ, которым он работает, заключается в том, что он сначала делает выбор в таблице для любых записей, которые не были выполнены. Затем для первой записи он выполнит вызов 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);?>
P.s Im PHP все еще учусь, так что любая помощь приветствуется.
Это, кажется, жизнеспособный вариант, но я не могу найти какие-либо примеры prooer о том, как его применять. http://stackoverflow.com/questions/3632075/mysqli-giving-commands-out-of-sync-error-why – user3646925