[英]PHP How to INSERT a JSON object/array in a MySQLi Database
我有一個帶有數百個鍵的json對象。 這些都作為JSON對象存儲在數組中,如下所示:
$allRows= array(
/* ===== Task ===== */
"Major task 1" => array(
"major-task" => array(
"points" => 1,
"hours" => 1,
),
"minor-task" => array(
array(
"points" => 4,
"task" => "Minor task 1",
),
array(
"points" => 2,
"task" => "Minor task 2",
),
array(
"points" => 2,
"task" => "Minor task 3",
),
)
),
/* ===== Task ===== */
"Major task 2" => array(
"major-task" => array(
"points" => 6,
"hours" => 7,
),
"minor-task" => array(
array(
"points" => 4,
"task" => "Minor task 1",
),
array(
"points" => 1,
"task" => "Minor task 2",
),
array(
"points" => 1,
"task" => "Minor task 3",
),
)
),
);
該對象中的數據並非都具有相同的格式,即某些Major tasks
可能有也可能沒有minor task
字段,等等,因此遍歷對象並手動插入每個對象是不可行的(這似乎也沒有必要)。
我正在嘗試的當前方法:
$conn = connectToDatabase();
// Query for updating the password
$t = time();
$encodedObj = json_encode($allRows);
$statement = "INSERT INTO user_rows(username, sheet, last_update) VALUES ('$user', $encodedObj, $t)";
if ($query = $conn->prepare($statement)) {
$query->execute();
}
else {
$error = $conn->errno . ' ' . $conn->error;
echo "<br><br>" . $error;
die();
}
我只想將json數組/對象直接插入數據庫中,以便將其存儲在一列中。
任何幫助表示贊賞!
編輯:使用bind_param
更新了代碼:
$t = time();
$s = json_encode($allRows);
$statement = "INSERT INTO user_spreadsheet (username, spreadsheet, last_update) VALUES (:u, :s, :t)";
if ($query = $conn->prepare($statement)) {
$query->bind_param(':u', $user);
$query->bind_param(':s', $s);
$query->bind_param(':t', $t);
$query->execute();
}
else {
$error = $conn->errno . ' ' . $conn->error;
echo "<br><br>" . $error;
die();
}
$t = time(); $s = json_encode($allRows); $statement = "INSERT INTO user_spreadsheet (username, spreadsheet, last_update) VALUES (?, ?, ?)"; if ($query = $conn->prepare($statement)) { $query->bind_param('sbi', $user, $s, $t); // $query->bind_param(':u', $user); // $query->bind_param(':s', $s); // $query->bind_param(':t', $t); $query->execute(); } else { $error = $conn->errno . ' ' . $conn->error; echo "<br><br>" . $error; die(); } echo "worked"; return;
經過一段時間的代碼查找,我找到了答案。 代碼塊:
$t = time();
$s = json_encode($allRows);
$statement = "INSERT INTO user_spreadsheet (username, spreadsheet, last_update) VALUES (?, ?, ?)";
if ($query = $conn->prepare($statement)) {
$query->bind_param('sbi', $user, $s, $t);
// $query->bind_param(':u', $user);
// $query->bind_param(':s', $s);
// $query->bind_param(':t', $t);
$query->execute();
}
else {
$error = $conn->errno . ' ' . $conn->error;
echo "<br><br>" . $error;
die();
}
echo "worked";
return;
正確率為99%。 但是一行需要更改:
$query->bind_param('sbi', $user, $s, $t);
需要成為
$query->bind_param('ssi', $user, $s, $t);
因為JSON是編碼后的字符串,因此需要這樣插入到數據庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.