2015-08-27 5 views
1

Мне нужна помощь в поиске моей ошибки по прилагаемому коду. Когда я запускаю любой из двух запросов, используя метод if ($conn->query($sql) === TRUE) {, каждый работает правильно. Но когда я пытаюсь объединить их с методом if ($conn->multi_query($sql) === TRUE) {. Записи не загружаются. Что я делаю неправильно здесь.У multi_query() есть ошибка

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "practice"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connection made..."; 

$payload_dump = $_POST['payload']; 
echo $payload_dump; 

$payload_array = json_decode($payload_dump,true); 

if(is_array($payload_array)){ 
foreach($payload_array as $row){ 

//get the data_payload details 

$device = $row['device']; 
$type = $row['data_type']; 
$zone = $row['zone']; 
$sample = $row['sample']; 
$count = $row['count']; 
$time = $row['date_time']; 
$epoch = $row['epoch_stamp']; 

$sql = "INSERT INTO data(device, type, zone, sample, count, date_time, epoch_stamp) VALUES('$device', '$type', '$zone', '$sample', '$count', '$time', '$epoch');"; 
$sql . = "UPDATE data SET date_time = FROM_UNIXTIME(epoch_stamp);"; 
if ($conn->multi_query($sql) === TRUE) { 
//if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
} 
} 
$conn->close(); 
?> 

... и да, я понимаю, что этот код не является безопасным, но это нормально для моих целей тестирования.

+0

что же '$ conn-> ошибка,' должен сказать? –

+0

плюс, ваше обновление попытается обновить всю таблицу. Используйте предложение 'where'. –

+0

Его вызывается из Arduino, и я не знаю, как отобразить сообщение об ошибке обратно в оболочку. Мои навыки кодирования довольно просты. – ghowe

ответ

3

По сути, код ниже тот же, пока мы не перейдем к циклу, где мы создадим массив запросов, которые будут выполняться, и выполните multi_query() один раз в конце, как только мы покинем цикл. Я удалил некоторые комментарии и заявления, которые для краткости повторяют информацию в начале. Я надеюсь, что это выглядит нормально и работает ....

<?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbname = "practice"; 

    $conn = new mysqli($servername, $username, $password, $dbname); 
    if($conn->connect_error) die("Connection failed: " . $conn->connect_error); 
    $payload_dump = $_POST['payload']; 

    $payload_array = json_decode($payload_dump,true); 

    if(is_array($payload_array)){ 

     $queries=array(); 

     foreach($payload_array as $row){ 
      //get the data_payload details 
      $device = $row['device']; 
      $type = $row['data_type']; 
      $zone = $row['zone']; 
      $sample = $row['sample']; 
      $count = $row['count']; 
      $time = $row['date_time']; 
      $epoch = $row['epoch_stamp']; 

      /*note: we do not need to add the semi-colon here as it gets added later when we implode the array */ 
      $queries[]="INSERT INTO `data` (`device`, `type`, `zone`, `sample`, `count`, `date_time`, `epoch_stamp`) VALUES ('$device', '$type', '$zone', '$sample', '$count', '$time', '$epoch')"; 
     } 
     /* 
      Previously the below query was being execute on every iteration 
      ~ because $epoch is now the last one encountered in the array, 
      the value that is updated in ALL records is as it would have been 
      previously. 
     */ 
     $queries[]="UPDATE `data` SET `date_time` = from_unixtime($epoch);"; 

     $sql=implode(';', $queries); 
     if ($conn->multi_query($sql) === TRUE) { 
      echo "New records created and updated successfully"; 
     } else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
    } 
    $conn->close(); 

?> 
+0

* Пальцы скрещены * –

+0

Дал OP a * последнее усилие в канаве * комментарий около 10 минут назад ... от этого еще ничего не сказано. –

+0

должно быть время обеда – RamRaider

Смежные вопросы