为什么我的哈希值总是以全0的形式出现?

时间:2011-11-11 21:43:18

标签: php mysql hash mysqli md5

这是我的功能:

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,不是吗?

2 个答案:

答案 0 :(得分:2)

如果出现错误,md5_file将返回false,当存储在数据库中时会转换为0。使用===运算符检查函数是否返回false。

因为哈希是一个字符串,所以你可以创建类型s(字符串)的参数。

答案 1 :(得分:1)

您可能需要查看绑定参数,看看是否必须放置占位符来说明“FULL”。 insert语句设置为在picture_id之前放置type,但在bind_param中,您没有引用type。所以可能是MySQL试图用hash填充picture_id