Mysql

為什麼這個 blob 在用作連接字元串而不是準備好的語句時會保存

  • November 20, 2018

我有一個 PHP mysqli 準備好的語句,如下所示:

$editSQL = "UPDATE tblClientReminders
             SET Header = ?, Notes = ?, DepartmentID = ?,
                 TierID = ?, RemindType = ?, RemindDate = ?, DateAdded = ?
             WHERE ReminderID = ?";
    $stmt = $conn->prepare($editSQL);
    $stmt->bind_param('sbiiissi', $input[1], $input[2], $input[3],
            $input[4], $input[5], $input[6],
            $DateAdded, $_SESSION[$thisTracker]);
    $DateAdded = date("Y-m-d h:i:s");
    $stmt->execute();
    $stmt->close();

當我執行它時,它執行時不會拋出任何錯誤並按預期執行其他所有內容;但是,即使 $input,“Notes”欄位也會被清除

$$ 2 $$有內容。但是當我使用連接來做到這一點時:

$editSQL = "UPDATE tblClientReminders
        SET Header = '".$input[1]."', Notes = '".$input[2]."',
            DepartmentID = '".$input[3]."', TierID = '".$input[4]."',
            RemindType = '".$input[5]."', RemindDate = '".$input[6]."',
            DateAdded = '".date("Y-m-d h:i:s")."'
        WHERE ReminderID = '".$_SESSION[$thisTracker]."'";
    $stmt = $conn->prepare($editSQL);       
    $stmt->execute();
    $stmt->close();

$ input[2] is properly saved along with everything else. I have verified that the column “Notes” is a blob in the mySQL database, and that $ 輸入

$$ 2 $$當我嘗試準備好的語句時,實際上包含預期的數據。那麼,為什麼是 $input$$ 2 $$在第一個範例中沒有保存,我將如何解決這個問題。 我能想到的唯一其他因素是 $input

$$ 2 $$正在傳遞一個 AES 字元串,但我想不出為什麼會出現問題,因為我的程式碼中其他地方的其他查詢都很好地保存了 AES 字元串,但我認為這是唯一一個對 blob 執行此操作的查詢。 輸入範例:

$input[1] = 'test';
$input[2] = '8L2G1urlEQEjZdyMrSQeow==::88f32b3584167b1d7286a57f861d4fd6';
$input[3] = 1;
$input[4] = 3;
$input[5] = 0;
$input[6] = '2018-11-20';
$_SESSION[$thisTracker] = 15;

bind_param頁面提到(強調我的)的types參數

對應的變數是一個blob,將在數據包中發送

以這種方式完成:

$null = NULL;
$stmt->bind_param('sbiiissi', $input[1], $null, $input[3],
        $input[4], $input[5], $input[6],
        $DateAdded, $_SESSION[$thisTracker]);
$stmt->send_long_data(1, $input[2]);

如果您的 BLOB 數據超過了max_allowed_packet您需要send_long_data多次呼叫的大小,則每次發送一個較小的片段。

此 Oracle 部落格中的更多資訊。

引用自:https://dba.stackexchange.com/questions/223003