Estou seriamente preso tentando passar uma atualização para um banco de dados MySQL com uma matriz usando PHP. Os dados são provenientes de um Reagir aplicativo usando PHP para a api. Atualmente eu sou incapaz de obter resultados refletidos no banco de dados.
Matriz de Reagir
{"updateArray":
[{"user_id":"1000005","harassment_val":true,"safety_val":null},
{"user_id":"1000006","harassment_val":1,"safety_val":null},
{"user_id":"1000007","harassment_val":0,"safety_val":null},
{"user_id":"1000008","harassment_val":0,"safety_val":null},
{"user_id":"1000009","harassment_val":0,"safety_val":null,},
{"user_id":"1000010","harassment_val":1,"safety_val":1},
{"user_id":"1000011","harassment_val":0,"safety_val":null},
{"user_id":"1000012","harassment_val":0,"safety_val":null}]
}
Atual Código PHP
<?php include 'DBConfig.php';
$con = new mysqli($HostName, $HostUser, $HostPass, $DatabaseName);
$json = file_get_contents('php://input');
$obj = json_decode($json,true);
$update_array = $obj['updateArray'];
// $update_array is array obj from app
// $content is field harassment_val in array
// $id is user_id field array to be used as key
// users, name of table to be updated
// harassment_val is field in table to be updated
// user_id is field in table to be used as key
foreach ($update_array as $key => $users) {
$content = intval($users->harassment_val);
$id = intval($users->user_id);
$sql = "UPDATE users SET harassment_val='$content' WHERE user_id='$id'";
$result = mysqli_query($con,$sql);
}
?>
Eu me deparei com mysqli_real_escape_string mas estou usando intval como verdadeiro deve retornar um número inteiro de 1, porém não tenho certeza sobre isso. Obrigado por qualquer ajuda.
Felicidades,
Desde que você tem true
como o segundo argumento para json_decode()
, você está recebendo arrays associativos, não objetos. Retirar esse argumento para que você possa usar $users->user_id
.
Então você deve usar uma declaração preparada em vez de substituição de variáveis.
<?php include 'DBConfig.php';
$con = new mysqli($HostName, $HostUser, $HostPass, $DatabaseName);
$json = file_get_contents('php://input');
$obj = json_decode($json);
$update_array = $obj['updateArray'];
$sql = "UPDATE users SET harassment_val=? WHERE user_id=?";
$stmt = $con->prepare($sql);
$stmt->bind_param("ii", $content, $id);
foreach ($update_array as $key => $users) {
$content = $users->harassment_val;
$id = $users->user_id;
$result = $stmt->execute();
if (!$result) {
echo "Error: $stmt->error <br>";
}
}
?>