这是我的功能:
function process_image($path) {
global $mysqli;
list($width,$height) = getimagesize($path);
$hash = md5_file($path,true);
$pic = $mysqli->prepare('INSERT INTO pictures () VALUES ()');
$pic->execute();
$pic_id = $pic->insert_id;
$size = $mysqli->prepare("INSERT INTO picture_sizes (filename, type, picture_id, hash, width, height) VALUES (?,'FULL',?,?,?,?)");
$size->bind_param('sibii',$path,$pic_id,$hash,$width,$height);
if(!$size->execute()) {
echo $size->error.'<br/>';
}
}
'hash'字段在我的数据库中始终显示为0。我把它设置为BINARY(16)
。我猜我错误地使用$size->bind_param
,但我无法弄清楚如何正确使用它。 $hash
是二进制的,所以我应该使用b
,不是吗?
答案 0 :(得分:2)
如果出现错误,md5_file将返回 false
,当存储在数据库中时会转换为0
。使用===
运算符检查函数是否返回false。
因为哈希是一个字符串,所以你可以创建类型s
(字符串)的参数。
答案 1 :(得分:1)
您可能需要查看绑定参数,看看是否必须放置占位符来说明“FULL”。 insert语句设置为在picture_id之前放置type
,但在bind_param中,您没有引用type
。所以可能是MySQL试图用hash
填充picture_id
。