API を使用して自分のサイトを別の Web サイトと統合しています。API 呼び出しの 1 つから、応答をテーブルに挿入したいと考えています。cURL を使用して API をクエリし、PDO を使用してそれを MySQL データベースに挿入しています。
関連するコードは次のとおりです。
// 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');
}
$uploadDetails
次に、ファイル ID、ファイル名、ファイル サイズ、およびファイルの md5 値を保持する API 応答の配列である変数を呼び出します。次のクエリを使用して、ファイル 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 が返されていることもわかっています。応答をエコーすることで確認しました。ただし、何らかの理由で、PDO はrs_fileid
列の下にこの値を挿入し続けます: 2147483647
。
明確にするために、API 呼び出しからのサンプル応答を次に示します。
Array
(
[0] => 3294575677
[1] => Untitled_1.png
[2] => 478923
[3] => ae83e53e5bf26406715daed0d44adc45
)
関連するデータベース行は次のとおりです。
ご覧のとおり、rs_fileid
一意である必要がある列のすべてのフィールド値が同じであり、API は一意の値で応答しています。
何が起こっているのか知っている人はいますか?ありがとうございました。