2011-06-14 105 views
4

我正在嘗試讀取XML文件並將其與現有數據庫中的字段進行比較。如何檢查MySQL中是否存在使用PHP的行

如果數據庫中的ID不存在於XML文件中,那麼對應於該ID的整行不再有效並將被刪除。

爲此,我在while語句中從頭到尾閱讀XML的每一行。

作爲第一步,我試圖做一個簡單的比較,如果在XML中不存在的數據庫中發現一個Id,則回顯。

我知道數據庫中存在一些不存在於XML中的Id,但以下代碼不顯示它們。

我有三個問題,首先,我將如何顯示從數據庫中提取的Id,其次爲什麼這個代碼不能找到任何不在XML中的ID?

最後一個問題是我是否完全錯誤地做這件事,還有更好的方法來做到這一點!

$sql_result = mysql_query("SELECT id FROM `list` WHERE id = $id") or die(mysql_error()); 

if($sql_result) 
{ 
// echo $id . " Id exists " . $sql_result["id"] . "\n"; 
} 
else 
{ 
echo "Id no longer exists" . $id . "\n"; 
} 

回答

5

這是正確的方法來檢查:

$sql_result = mysql_query("SELECT `id` FROM `list` WHERE `id` = ".intval($id,10)." LIMIT 0,1"); 

if(is_resource($sql_result) && mysql_num_rows($sql_result) > 0){ 
    $sql_result = mysql_fetch_assoc($sql_result); 
    echo $id . " Id exists " . $sql_result["id"] . "\n"; 
} 
else{ 
    echo "Id no longer exists" . $id . "\n"; 
} 
+0

如果您正在測試資源是否被返回,那麼您的或死的([...])是毫無意義的,因爲如果發生了某個資源,它會打到die(),否則您的支票不是兩個。 – 2011-06-14 18:07:17

+0

'mysql_query'現在已被棄用。 http://php.net/manual/en/function.mysql-query.php。改爲使用'mysqli_query'。 – 2013-09-21 12:26:53

1
mysql_num_rows() 

或者

SELECT COUNT(*) [...] 

+1

這是我正在努力的PHP,但感謝您更改mysql的建議.... – kitenski 2011-06-14 14:11:05

3

您應該檢查的行數用mysql_num_rows()返回。否則,您只是簡單地檢查查詢執行沒有任何錯誤。

if($sql_result) 

if(mysql_num_rows($sql_result)) 
+1

天知道爲什麼這是downvoted。 – 2011-06-14 14:09:02

+1

同我的... – 2011-06-14 14:11:51

+0

@Michael必須是巨魔。 – 2011-06-14 14:12:41

5

您的代碼沒有找到你所期望的,因爲即使該ID就可以發現,$sql_result仍持有TRUE值,因爲查詢成功。相反,檢查是否myqsl_num_rows() > 0

if($mysql_num_rows($sql_result) > 0) 
{ 
    // echo $id . " Id exists "\n"; 

    //Now, to print the id, you need to fetch it from `$sql_result`, 
    //which is just a resource at this point: 
    $row = mysql_fetch_assoc($sql_result); 
    echo $row['id']; 
} 
+0

希望評論與downvote一起... – 2011-06-14 14:11:12

+1

必須是來自我的+1壓裂巨魔+1,這就是答案 – afarazit 2011-06-14 14:19:23

+1

這是一個正確的答案,但也要注意@Gerep中的一個,它可能會有所幫助如果有很多條目,則使用IN(id,id,id)做一個查詢。 – 2011-06-14 14:33:11

3

你可以在你的選擇就沒有使用()與您的XML存在類似的ID:

SELECT id FROM `list` WHERE id NOT IN($your_id_list) 

有了這個,你將有ID的列表不在列表中。

你的ID必須與像逗號分隔:

SELECT id FROM `list` WHERE id NOT IN(123,654,987,45) 
2

問題1:我將如何顯示從拉標識數據庫?

$sql_result = mysql_query("SELECT `id` FROM `list` WHERE `id` = $id") or die(mysql_error()); 
$sql_row = mysql_fetch_assoc($sql_result); 
if(!empty($sql_row['id'])) { 
    echo "Id exists - " . $sql_row['id'] . "\n"; 
} else { 
    echo "Id no longer exists - " . $sql_row['id'] . "\n"; 
} 

問題2:爲什麼這段代碼找不到任何不在XML中的ID?

我認爲在你的代碼中if()條件將總是返回true,而不管數據庫中是否存在Id。其次,您可能已經從上面的代碼中猜到了,但您錯過了從SQL結果集獲取數據的問題

問題3:我是否完全錯誤地進行此操作,是否有更好的方法來執行此操作?

通過瀏覽XML並檢查數據庫中的每個條目是否存在,您正在以正確的方式執行此操作。一個更好的辦法可能是先檢索來自XML的所有ID,然後在一個SQL查詢中使用它們:

SELECT `id` FROM `list` WHERE `id` NOT IN ($list); 

請注意,如果有在XML一個非常大的數字ID的這個查詢可能會運行緩慢文件,說幾百。