2011-11-11 4 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

거짓을 반환하지 않습니다. 나는 그것을 출력하려했다. 괜찮아. 꽤 그것이 내 인서트와 관련이 있는지 확인하십시오. – mpen

+1

매개 변수 유형에'b' 대신's'을 사용하려고하면 어떻게됩니까? – GolezTrol

+0

참으로 해시가 blob로 입력되는 이유에 대해 혼란 스럽습니다. – dispake

1

바인드 매개 변수를보고 'FULL'을 설명하기 위해 자리 표시자를 넣어야하는지 확인해야 할 수도 있습니다. insert 문은 picture_id 앞에 type을 넣도록 설정되어 있지만 bind_param에는 type에 대한 참조가 없습니다. 따라서 MySQL이 hashpicture_id으로 채우려 고 시도한 것일 수 있습니다.

+0

유형 'FULL'은 문자열 상수이며 매개 변수가 아닙니다. bind_param은 물음표를 사용하여 표시된 매개 변수와 일치합니다. 실제로 삽입의 필드 목록에있는 각 필드의 값을 기대하지는 않습니다. – GolezTrol

+0

'FULL'이 DB의 오른쪽 필드에 삽입됩니다. bind_param은 모든 참조를 기대하기 때문에 placeholder를 두지 않았고 'FULL'은 상수/참조가 아니므로 먼저 변수에 바인딩하지 않고는 할 수 없었습니다. – mpen

+0

Mark : 오, 오스, 오랜 시간 동안 내가 mysqli를 사용했기 때문에 잘 모르겠다. 오프셋 된 문제처럼 보였다. –

관련 문제