【发布时间】:2017-10-05 20:17:48
【问题描述】:
我正在尝试用 Python 重写以下 PHP 代码,但不知道该怎么做。我对字节、十六进制和二进制的经验几乎没有,我发现这非常令人困惑。
$code_string = "0000000000000248";
$code_array = array();
$tokens = str_split($code_array, 2);
foreach ($tokens as $token) {
$byte = hexdec($token);
array_push($code_array, $byte);
}
$code_blob = pack("C*",
$code_array[0],
$code_array[1],
$code_array[2],
$code_array[3],
$code_array[4],
$code_array[5],
$code_array[6],
$code_array[7]
);
$sql = "INSERT INTO some_table (code) VALUES ($code_blob)"
“代码”字段是 MySQL binary(8) 类型。当上面的代码在 PHP 中运行时,代码插入没有问题。在 phpMyAdmin 中,当我查看记录时,它表示为“0000000000000248”。
我不确定这是否是有用的信息,但是当我一一打印令牌时,它们看起来像这样
foreach ($tokens as $token) {
$byte = hexdec($token);
array_push($code_array, $byte);
echo "$byte ";
}
// looks like 0 0 0 0 0 0 2 72
当我打印 SQL 时,它看起来像这样
INSERT INTO some_table (code) VALUES ('H')
我不知道如何在 Python (3.4) 中执行此操作
感谢 t.m.adam 的正确答案。就像注释一样,要将其插入数据库中,您必须这样做
sql = "INSERT INTO some_table (code) VALUES (%s)"
cursor.execute(sql, (code_blob,))
db.commit()
如果您将 blob 直接放入 Python 中的字符串中,则字符串看起来像 b'...' 并破坏 SQL。
【问题讨论】:
标签: php python mysql binary hex