二进制数据未在MySQL中正确存储

时间:2017-02-06 09:45:39

标签: php mysql mysqli blob

我想将base64_encoded字符串存储为二进制数据。因此,在插入MySQL的LONGBLOB字段之前,请在字符串上使用base64_decode()。到目前为止一切顺利,但是当我从MySQL检索数据时,我无法生成正确的base64_encoded字符串,我已经开始使用...

这怎么可能?提前致谢

修改

存储的数据是带有AES-256CBC OPENSSL加密例程的加密字符串。

CODE

对于我的代码,我使用OpenSSL加密字符串

$string = "Test";
$IV = "1234567890123456";
$key = "12345678901234561234567890123456";
$encrypted = openssl_encrypt($string, "AES-256-CBC", $key, false, $IV);

$encrypted string is stored in LONGBLOB field by 
$sql_insert_data = $mysqli->prepare("INSERT INTO `TBLName` (String) Values(?)");
$sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted));

//Thereafter, it is retrieved by a select statement
$decrypted = openssl_decrypt($row['String'], "AES-256-CBC", $key, true, $IV);

当我对字符串执行base64_encode并将其作为TEXT值存储在数据库中时,上述工作正常。但是,当我不这样做时,上述情况不起作用......

由于

2 个答案:

答案 0 :(得分:1)

您正在错误地使用预准备语句:

$sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted));
                                           ^^^^^^^^^^^^^^^^^^ :-!

您的代码会将随机反斜杠添加到二进制流中。您根本不需要real_escape_string()

答案 1 :(得分:-1)

"该死的儿子,问题是如何在mysql中成功优化base64_encoded数据的存储。这就是全部。" - 见https://stackoverflow.com/a/42080296/1766831