2011-11-11 3 views
1

は私の機能です:なぜ私のハッシュは常にすべての0として出てくるのですか?ここ

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/>'; 
    } 
} 

「ハッシュ」フィールドは、常に私のデータベースでは0として表示されます。私はそれをBINARY(16)に設定しました。私は$size->bind_paramを間違って使用していると推測していますが、正しく行う方法を理解できません。 $hashはバイナリなので、bを使ってください。エラーの場合に

答えて

2

、md5_fileはデータベースに格納されている場合 0に変換され、 falseを返します。 ===演算子を使用して関数がfalseを返すかどうかを確認します。

ハッシュは文字列なので、タイプs(文字列)のパラメータを作成できます。

+0

falseを返していません。私はそれを出力しようとしました。よく見えます。それは私の挿入物と関係があると確信しています。 – mpen

+1

パラメータの型に 'b'の代わりに' s'を使用しようとするとどうなりますか? – GolezTrol

+0

確かに私はハッシュがブロブとしてタイプされている理由について混乱しています – dispake

1

バインドパラメータを確認して、「FULL」を考慮するにはプレースホルダーを入れなければならないかもしれません。 insert文はpicture_idの前にtypeを入れるように設定されていますが、bind_paramにはtypeという参照はありません。したがって、MySQLがhashpicture_idを設定しようとしている可能性があります。

+0

タイプ 'FULL'は文字定数であり、パラメータではありません。 bind_paramは、疑問符を使用して示されたパラメータと一致します。挿入物のフィールドリストの各フィールドの値は実際には期待されていません。 – GolezTrol

+0

'FULL'はDBの右側のフィールドに挿入されます。 bind_paramはすべての参照を期待しており、 'FULL'は定数/参照ではないので、プレースホルダを置いていないので、最初に変数にバインドせずに実行できませんでした。 – mpen

+0

Mark:ああ、私がmysqliを使ってからずっとずっとずっとずっとずっと、それは相殺問題かもしれないように見えました。 –

関連する問題