好吧,我認爲我已經嘗試了一切,閱讀Allot,但我似乎無法找到任何解決方案。我試圖創建一個腳本來打開一個XML文件並將其讀入我的數據庫。我發現了PHP PDO,因此我決定嘗試並使用它,但這會讓我失望。PHP PDO綁定問題
我創建以下數據庫表:
$sql = "
DROP TABLE IF EXISTS eve_market_data;
CREATE TABLE eve_market_data
(
`order` INT NOT NULL,
`region` INT NOT NULL,
`station` INT NOT NULL,
`range` INT,
`price` FLOAT(12,2) NOT NULL,
`vol_remain` INT,
`min_volume` INT,
`expires_date` DATE,
`reported_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`sell` INT NOT NULL,
PRIMARY KEY(`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
下面的查詢應足以將數據加載到數據庫(據我所知雲):
$sql = "
INSERT INTO `eve_market_data`
(`order`, `region`, `station`, `range`, `price`, `vol_remain`, `min_volume`, `expires_date`, `reported_time`,`sell`)
VALUES
(
:orderid,
:regionid,
:stationid,
:range,
:price,
:volremain,
:minvolume,
:expires,
:reportedtime,
:sell
)
ON DUPLICATE KEY UPDATE
`range` = :range,
`price` = :price,
`vol_remain` = :volremain,
`min_volume` = :minvolume,
`expires_date` = :expires,
`reported_time` = :reportedtime
;";
然後下面的代碼應該加載到db:
$sth = $db->prepare($sql);
for($i = 0; $i < count($so->order); $i++)
{
$order = $so->order[$i];
echo "[{$i}] Inserting... " . $order['id'];
$sth->bindParam(':orderid', $orderid = (int) $order['id']);
$sth->bindParam(':regionid', $regionid = (int) $order->region);
$sth->bindParam(':stationid', $stationid = (int) $order->station);
$sth->bindParam(':range', $range = (int) $order->range);
$sth->bindParam(':price', $price = (float) $order->price);
$sth->bindParam(':volremain', $volremain = (int) $order->vol_remain);
$sth->bindParam(':minvolume', $minvolume = (int) $order->min_volume);
$sth->bindParam(':expires', $expires = (string) $order->expires);
$sth->bindParam(':reportedtime', $reporttime = date('Y') . "-" . (string) $order->reported_time);
$sth->bindParam(':sell', $sell = 1);
if($sth->execute()) echo '<br/>Executed';
echo "<br/><br/>";
if($i === 7) break;
}
但由於某種原因,我的命令I D對於每個查詢都保持不變。我已經通過刪除'on duplicate'語句來測試它,並且每次執行查詢時都會顯示此錯誤:
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [23000] :完整性約束違規:1062重複條目「2147483647」的關鍵「主要」在* /ECProcessor.php第65行
我一遍遍檢查的參數,並在代碼中看到它實際上是呼應的訂單ID,所以我絕對確定訂單ID正在改變。其他參數似乎更改得很好,生成的行包含除訂單ID以外的最後一個XML「行」所具有的所有其他數據。
有人知道問題是/可能是什麼嗎?提前致謝。
解
2147483647 @deceze是巧合的一個32位整數的最大可能的數目。我猜你試圖存儲一個比這個數字更大的數字,並且它在那裏最大。
2147483647是巧合的一個32位整數的最大可能的數目。我猜你試圖存儲一個比這個數字更大的數字,並且它在那裏最大。 – deceze
@deceze丁丁丁。 @Swahjak,爲'order'字段類型更改爲'bigint' – Prisoner
嘎甚至沒有注意到:) – Dave