2013-07-08 100 views
2

試圖讓準條件插入工作。數據庫中有三種不同類型的元素,而created_at日期是唯一鍵。構建數據庫的人對每個表使用相同的結構(課程,系列,包),所以我必須依靠created_at字段來獲取唯一值。PHP/MySQL條件插入不插入

這種情況是我想要插入一個新行,但我不知道它是否位於purchased_lessons,purchased_series或purchased_pa​​ckages表中。我知道$ item_current(這是從$ _POST返回的日期 - 在另一節中工作),並且我知道$ user_id(同樣的原因)。但是這並沒有插入一個新的行:

$is_lesson = mysql_real_escape_string(mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\"")); 
$is_series = mysql_real_escape_string(mysql_query("SELECT id FROM series WHERE created_at LIKE \"$item_current\"")); 
$is_package = mysql_real_escape_string(mysql_query("SELECT id FROM packages WHERE created_at LIKE \"$item_current\"")); 
$lesson_rows = mysql_num_rows($is_lesson); 
$series_rows = mysql_num_rows($is_series); 
$package_rows = mysql_num_rows($is_package); 
$lesson_result = mysql_fetch_array($is_lesson); 
$series_result = mysql_fetch_array($is_series); 
$package_result = mysql_fetch_array($is_package); 
$lesson_id_to_insert = $lesson_result['id']; 
$series_id_to_insert = $series_result['id']; 
$package_id_to_insert = $package_result['id']; 

if ($lesson_rows > 0) { 
    mysql_query("INSERT INTO purchased_lessons VALUES ($user_id,$lesson_id_to_insert])"); 
} else if ($series_rows > 0) { 
    mysql_query("INSERT INTO purchased_series VALUES ($user_id,$series_id_to_insert)"); 
} else if ($package_rows > 0){ 
    mysql_query("INSERT INTO purchased_packages VALUES ($user_id,$package_id_to_insert)"); 
} 

我太接近,我不能看到樹林,我猜。它只是不會執行插入。

+0

echo out $ lesson_rows $ series_rows $ package_rows – mnagel

+0

你逃避結果集? – DevZer0

+0

'mysql_query'不返回字符串,你不能逃避。順便說一句,不要使用已棄用的'mysql_ *'函數 – DanFromGermany

回答

0

嘗試這樣的:

mysql_query("INSERT INTO purchased_lessons VALUES (\"$user_id\",\"$lesson_id_to_insert\")"); 

在每次插入查詢添加了引號。

+0

有許多方法可以將變量放入字符串中,最好的方法仍然是Zend建議的方法:'mysql_query(「INSERT INTO purchased_lessons VALUES('」。$ user_id。「','。。$ lesson_id_to_insert。'')' 「);' – DanFromGermany

+0

@DanFromGermany是的,我們也可以做到這一點。我知道。我的主要座右銘是告訴OP在插入查詢中錯過了冒號。 –

+1

除了刪除mysql_real_escape_string,重寫這樣的查詢工作。謝謝!! –

0

您的代碼頂部也是不正確的更改以下內容,因此您有mysql_real_escape_stringmysql_query返回值。

$is_lesson = mysql_real_escape_string(mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\"")); 

閱讀

$is_lesson = mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\""); 
0

取出mysql_real_escape_string(....) 這是試圖逃跑返回的資源句柄,沒必要和可能出現問題,到後來mysql_num_rows()。

我不會打擾關於使用現在不推薦使用的mysql_ *調用的警告,因爲它顯而易見,您正在維護一個不是由您編寫的現有舊系統。