2013-04-29 62 views
0

我有一個問題,我的應用程序,這些記錄不被從一個表複製說使用PHP MYSQL & TABLEA到另一個表說tableB的。 只有當主鍵是19位數字長並從數字開始並且適用於所有其他主鍵時纔會出現此問題。 報告沒有錯誤,該過程簡單地無法複製結果。插入選擇 - 不工作

我用下面的查詢複製的記錄 - 在使用蟾蜍/ phpMyAdmin的手動執行

INSERT into tableB (select * from tableA where primary_key_id=id) 

查詢工作正常。

任何想法或建議,以解決此問題將不勝感激。

+0

插入不INSET – 2013-04-29 09:43:41

+0

與19位我希望它只是運行了它的數據類型。 你能告訴我們一些周圍的PHP嗎? – nvanesch 2013-04-29 09:45:13

+0

我們需要有som代碼才能給您更多的反饋。例如,代碼中的id是如何分配的?實際查詢如何執行? – bestprogrammerintheworld 2013-04-29 09:50:04

回答

0

好吧,我確切地找到了問題..它是一個整數溢出在PHP中。

當PHP遇到一個數字太大而無法存儲一長時間時,它會將其置於浮動狀態。當它回聲浮動它將使用浮點符號。

而巧合的是它是一個19位數的數字,從9開始出現錯誤。

$large_number = 9223372036854775807; 
var_dump($large_number);      // int(9223372036854775807) 

$large_number = 9223372036854775808; 
var_dump($large_number);      // float(9.2233720368548E+18) 

所以你應該保持主鍵爲字符串或使用數字格式化程序來輸出它。

來源:http://php.net/manual/en/language.types.integer.php

+0

感謝您的回答..在我的PHP頁面中,所有主要ID都被創建/用作字符串。但是在更詳細的我的SQL查詢是這樣的$ p_id是從請求變量,即,$ p_id = $ _REQUEST ['p_id']; $ sql =「insert into tableB(select * from tableA where primary_key_id ='」。$ p_id。「')」;請建議,我想知道是否需要將$ p_id變量作爲字符串轉換? – KLH 2013-04-29 10:34:39

+0

我會嘗試vardump p_id。看看它顯示了什麼。如果它顯示的是問題的浮點格式,你應該對它做一個格式。如果它顯示正常(你的代碼會說它會,那麼問題是它在數據庫端的數據類型不足)(請參閱mvp答案) – nvanesch 2013-04-29 11:24:05

0

嘗試以下方式:

INSERT INTO table1 (column1) 
SELECT col1 
FROM table2 
0

你的意思

INSERT 

,而不是

INSET 

在這裏你可以怎麼做

insert into table_name (column1, column2) values (select column3, column4 from table2 where ...) 
1

要使INSERT ... SELECT正常工作,您必須提供INSERT的列的列表,或者SELECT的輸出完全匹配tableB的定義。

如果tableB的定義與tableA完全相同,那麼您的查詢應該有效(使用INSERT而不是INSET)。您也可以一次使用這個創造tableB

CREATE TABLE tableB AS SELECT * FROM tableA ... 

如果您tableAtableB確實是相同的結構,爲什麼你INSERT有19位長的主鍵可能會失敗的原因之一是因爲你可能會嘗試要將tableA中的重複密鑰插入tableB:您的INSERT將複製包括主鍵值在內的所有內容。

UPDATE:根據MySQL documentation,最大BIGINT值9,223,372,036,854,775,807 - 19位,最大值始於9。這聽起來很接近你對問題的描述。我相信你只是用完了BIGINT的最大允許值,而事實上你想要BIGINT(20)不會幫你。

+0

沒有重複的關鍵錯誤,是的,它複製包括主鍵在內的所有東西。 – KLH 2013-04-29 10:17:41

+0

@KLH:答案已更新 - 我認爲您已用盡BIGINT_MAX。 – mvp 2013-04-29 10:34:01

+0

哇..這是很多記錄... – webnoob 2013-04-29 10:35:58