2012-06-12 3 views
0

해당 API를 사용하여 내 사이트를 다른 웹 사이트와 통합합니다. API 호출 중 하나에서 응답을 테이블에 삽입하려고합니다. 저는 cURL을 사용하여 API를 쿼리하고 PDO를 사용하여 MySQL 데이터베이스에 삽입합니다. 내가 파일의 파일 ID, 파일 이름, 파일 크기와 MD5 값을 보유하고있는 API 응답의 배열입니다 $uploadDetails라는 변수가, 그리고PDO가 API 요청에서 동일한 필드 데이터 삽입

// Upload the file to RapidShare 
$uploadID = mt_rand(1000000000, 9999999999); 
$url = 'http://rs' . $uploadServer . '.rapidshare.com/cgi-bin/rsapi.cgi?uploadid=' . $uploadID; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
$postFields = array('sub' => 'upload', 
        'login' => 'mylogin', 
        'password' => 'mypassword', 
        'uploadid' => $uploadID, 
        'filename' => $filename, 
        'filecontent' => '@' . $targetDir . '/' . $id); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); 
if(!$resp = curl_exec($ch)) { 
    error('upload call failed'); 
} 

:

다음은 관련 코드입니다. 파일 ID를 다음 쿼리를 사용하여 데이터베이스에 삽입합니다.

// Database shinanagans 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=mytable', 'root', ''); 

    $query = 'INSERT INTO `files` (f_id, s_id, u_id, name, size, uploaded, rs_fileid) 
       VALUES (?, (SELECT s_id FROM `servers` WHERE name = ? LIMIT 1), (SELECT u_id FROM `users` WHERE username = ?), ?, ?, ?, ?)'; 

    $sth = $dbh->prepare($query); 
    $sth->execute(array($id, $server, 11, $uploadDetails[1], $uploadDetails[2], date('c'), $uploadDetails[0])); 

    $dbh = null; 
} catch(PDOException $e) { 
    error($e->getMessage()); 
} 

각 API 응답에는 고유 한 파일 ID가 있습니다. 그리고 나는 API 호출에서 정확하고 고유 한 파일 ID를 다시 얻고 있다는 것을 알고 있습니다. 나는 응답을 echo'ing하여 확인했습니다. 그러나 어떤 이유로 PDO는 rs_fileid 열에이 값을 계속 삽입합니다 : 2147483647.

대한 명확한

, 여기에 API 호출에서 샘플 응답입니다 :

Array 
(
    [0] => 3294575677 
    [1] => Untitled_1.png 
    [2] => 478923 
    [3] => ae83e53e5bf26406715daed0d44adc45 
) 

그리고 여기에 관련 데이터베이스 행의 :

enter image description here

당신이에 대한 모든 필드 값을 볼 수 있듯이 rs_fileid 열은 고유해야하며 API가 고유 값으로 응답 할 때 동일합니다.

누구나 무슨 일이 일어날 지 알고 있습니까? 고맙습니다.

답변

2

참고로 2147483647은 32 비트 부호있는 정수의 최대 값이며 샘플의 파일 ID는 그 값보다 훨씬 큽니다. PHP가 32- 또는 64- 비트 (그리고 데이터를 분석하고 시도하는 것을 괴롭 히 느냐) 여부에 따라 PHP가 어떻게 처리 할 지 확신 할 수 없지만 MySQL will clamp the number to the range of the field it goes into. 당신이 정말로 숫자로 해당 열을 필요로하지 않는 한, 적절한 길이의 VARCHAR 필드는 잘 작동, 또는 -

점검 데이터베이스 열이 BIGINT 또는 적어도 UNSIGNED INT 있는지 확인합니다.

+2

사실 2^31-1입니다. –

+0

아, 그게 다예요. 고맙습니다 :) –