2014-06-06 84 views
0

我在保存查詢時遇到了一個奇怪的問題,我想更好地瞭解如何解決它。在數據庫中添加記錄

我有2個表,例如數據庫:

TBL_PERSON 
person_id 
person_name 
person_telephone 

TBL_ADDRESS 
address_id 
address_person_id 
address_address 
address_city 
address_zip 

現在,我用這樣的查詢到存儲記錄:

$sqlQuery = "INSERT INTO TBL_PERSON ( 
    person_name, 
    person_telephone 
    ) VALUES (
    '$person_name', 
    '$person_telephone' 
    )"; 
$result = MYSQL_QUERY($sqlQuery); 

//Get last id 
$address_person_id = mysql_insert_id(); 

$sqlQuery = "INSERT INTO TBL_ADDRESS ( 
    address_person_id, 
    address_address, 
    address_city, 
    address_zip 
    ) VALUES (
    '$address_person_id', 
    '$address_address', 
    '$address_city', 
    '$address_zip' 
    )"; 
$result = MYSQL_QUERY($sqlQuery); 

有時候,沒有記錄在TBL_ADDRESS增加。 用戶按Insert後,Action Button,NameTelephone被存儲在TBL_PERSON上,但不存在於TBL_ADDRESS上的地址。

+0

您是否正在檢查可能的空字段?另外,你可能想把它放在小寫'MYSQL_QUERY'中,不管它是否有所作爲,我從來沒有嘗試過。 –

+0

檢查mysql_error(或者甚至更好地使用mysqli或PDO開始)。 –

+0

Fred,問題可以在數據庫中使用NOT NULL字段? – user2307958

回答

0

除了discussion on the use of deprecated an insecure mysql_* functions,我認爲這是一個很好的機會來解釋調試這樣的問題的方法。

在對mysql_ *查詢函數的替換中,將錯誤拋出異常,允許您將查詢包裝在try/catch塊中並進行相應處理。在mysql_query()的情況下,您只需從該函數返回false。因此,爲了能夠調試,因此看到什麼是錯的,你需要做這樣的事情(from the PHP manual):

$result = mysql_query('SELECT * FROM myTable'); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

如果查詢失敗,您將看到爲什麼,在調試時非常重要的。

正如評論中提到的,你不會逃避你的任何價值。除了這個事實,你不應該在所有使用這些功能(見mysqliPDO),您應至少可以逃避使用mysql_real_escape_string()方法你的價值觀:

$value = mysql_real_escape_string($value); 

如果你按照上面的邏輯,你將會看到是什麼導致了這個問題,並且我懷疑使用正確的轉義值成功修復了它。如果它不是值,那麼您的數據庫模式設計可能會遇到問題,例如不能爲空並且沒有默認值的列,但您可能會傳遞空值。

相關問題