Почему мой хэш всегда выходит как все 0? - PullRequest
1 голос
/ 12 ноября 2011

Вот моя функция:

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 ]

2 голосов
/ 12 ноября 2011

В случае ошибки md5_file возвращает false, который преобразуется в 0 при сохранении в базе данных.Проверьте, возвращает ли функция значение false, используя оператор ===.

Поскольку хэш является строкой, вы можете задать параметр типа s (строка).

1 голос
/ 12 ноября 2011

Возможно, вам придется взглянуть на параметр связывания и посмотреть, нужно ли указывать заполнитель для учета 'FULL'.Оператор вставки имеет значение type перед picture_id, но в вашем bind_param у вас нет ссылки на type.Возможно, MySQL пытается заполнить hash picture_id.

...