php - Update MySQL with an Array using PHP
问题描述
I am seriously stuck trying to pass an update to a MySQL database with an Array using PHP. The data is coming from a React app using PHP for the api. Currently I am unable to get results reflected in database.
Array from React
{"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}]
}
Current PHP Code
<?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);
}
?>
I've come across mysqli_real_escape_string but I am using intval as true should return an integer of 1, however I am unsure about this. Thanks for any help.
Cheers,
解决方案
Since you have true
as the second argument to json_decode()
, you're getting associative arrays, not objects. Remove that argument to so you can use $users->user_id
.
Then you should use a prepared statement instead of substituting variables.
<?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>";
}
}
?>
推荐阅读
- django - 为什么在 API 中使用 URL 参数而不是请求正文?
- hybris - Hybris Beanshell脚本启动业务流程
- dialogflow-es - 我们如何在 DialogFlow Web 演示 iframe 中传递一些参数
- java - Java 运行时环境检测到致命错误 (SIGBUS (0x7))
- c++ - 等待 Qt 中的线程信号?
- react-native - 首选 React Native 导航库
- antlr4 - ANTLR4 规则优先级
- javascript - 如何在登录页面框架7中隐藏面板和导航栏
- rxjs - 在 Angular 6 中链接 HttpClient 调用
- java - 获取消息正文 - Java