PDO insertando datos de campo idénticos de la solicitud API

Estoy integrando mi sitio con otro sitio web usando su API. De una de las llamadas a la API, quiero insertar la respuesta en una tabla. Estoy usando cURL para consultar su API y PDO para insertarlo en mi base de datos MySQL.

Aquí está el código relevante:

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

Entonces, tengo la variable llamada $uploadDetails que es una matriz de la respuesta de la API que contiene el ID del archivo, el nombre del archivo, el tamaño del archivo y el valor md5 del archivo. Estoy insertando la identificación del archivo en mi base de datos con esta consulta:

// 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());  
} 

Cada respuesta de la API tiene un ID de archivo único, lo sé con certeza. Y sé que obtengo el ID de archivo único y correcto de la llamada a la API. Lo he verificado haciendo eco de la respuesta. Sin embargo, por alguna razón, PDO sigue insertando este valor bajo el rs_fileid columna: 2147483647.

Para mayor claridad, aquí hay una respuesta de muestra de la llamada a la API:

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

Y aquí está la fila de la base de datos relevante:

enter image description here

Como puede ver, todos los valores de campo para el rs_fileid son las mismas, cuando deberían ser únicas, y la API responde con un valor único.

Alguien sabe que puede estar pasando? Gracias.

preguntado el 12 de junio de 12 a las 19:06

1 Respuestas

Nota, 2147483647 es el valor máximo para un entero con signo de 32 bits, y la identificación del archivo en su muestra está significativamente por encima de eso. No estoy seguro de cómo lo manejará PHP, ya que eso depende de si su PHP es de 32 o 64 bits (y si se molesta en intentar identificar los datos), pero MySQL sujetará el número al rango del campo en el que entra.

Verifique que la columna de su base de datos sea una BIGINT o al menos UNSIGNED INT -- o, a menos que realmente necesite que esa columna sea numérica, un VARCHAR campo de longitud apropiada también funcionaría.

Respondido el 12 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.