簡體   English   中英

PHP如何在MySQLi數據庫中插入JSON對象/數組

[英]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();
    }


編輯2:我也嘗試過此代碼。 不會產生任何錯誤,並且查詢不會有任何問題,但是實際上並沒有將數據插入表中:

  $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM