Использование PHP / MySQLi для l oop через массив json_decoded не работает для запроса на обновление - PullRequest
0 голосов
/ 25 апреля 2020

Я использую json_decode () для декодирования результата Ajax, который возвращает приведенный ниже массив (сокращенный пример). Теперь я хочу l oop через эту область и обновить RID для каждого VID в соответствии со значениями из массива, но эта часть не работает.

Может кто-нибудь показать мне, как правильно выполнить часть l oop здесь (сам запрос должен быть в порядке)?

Мой массив:

array(3) {
  [0]=>
  array(2) {
    ["vId"]=>
    string(8) "04567901"
    ["rId"]=>
    string(6) "DE-003"
  }
  [1]=>
  array(2) {
    ["vId"]=>
    string(8) "04567902"
    ["rId"]=>
    string(6) "DE-008"
  }
  [2]=>
  array(2) {
    ["vId"]=>
    string(8) "04567903"
    ["rId"]=>
    string(6) "DE-009"
  }
}

Мой PHP / MySQLi:

$postData = $_POST; 
$transferData = $_POST['transferData'];
$json = json_decode($transferData, true);

$conn = new mysqli($host, $username, $password, $database);
if($conn->connect_error) {
    die("Connection Error: " . $conn->connect_error);
}   
$stmt = $conn->prepare("UPDATE locations l SET l.rId = ? WHERE l.vId = ?");
foreach($json as $vId => $rId) {
    $stmt->bind_param('ss', $rId, $vId);
    $stmt->execute();
}

$stmt->close();
$conn->close(); 

1 Ответ

1 голос
/ 25 апреля 2020

В вашем foreach ключ относится к индексу массива, а не к тому, что вы считаете ключом. Ключи в вашем случае на самом деле 0, 1, 2, [...]. Вы возвращаете массив массивов, поэтому получите нужные вам части следующим образом:

foreach($json as $key => $value) {
    $stmt->bind_param('ss', $value['rId'], $value['vId']);
    $stmt->execute();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...