2013-01-15 145 views
0

我有一個小腳本可以將數據從csv文件上傳到mysql數據庫,我想檢查csv文件中的值列表。檢查mysql中是否存在值

CSV文件:

code,alert_quantity 
12345,10 

PHP文件:

<?php 
    $link_id = mysql_connect("localhost", "root", "") 
       or die("Could not connect."); 

    if(!mysql_select_db("database",$link_id)) 
    die("database was not selected."); 

    function _checkIfCodeExists($code){ 

    $sql  = "SELECT COUNT(*) AS count_no FROM products WHERE code = ?"; 
    $count  = $sql; 
    if($count > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 

    function _updateData($line_of_data){ 
    $code   = $line_of_data[0]; 
    $newAlert  = $line_of_data[1]; 

    $sql = "UPDATE "; 
} 

    $file_handle = fopen("file.csv", "r"); 

    while (($line_of_data = fgetcsv($file_handle, 1000, ",")) !== FALSE) { 

    $query = mysql_query("SELECT * FROM products WHERE code ='$line_of_data[0]'") or die(mysql_error()); 
    $message = ''; 
    $count = 1; 

    if(_checkIfCodeExists($line_of_data[0])){ 
     try{ 
      _updateData($_data); 
      $message .= $count . '> Success:: Product with code (' . $line_of_data[1] . ') Exist (' . $line_of_data[0] . '). <br />'; 

     }catch(Exception $e){ 
      $message .= $count .'> Error:: While updating alert (' . $line_of_data[1] . ') of code (' . $line_of_data[0] . ') => '.$e->getMessage().'<br />'; 
     } 
    }else{ 
     $message .= $count .'> Error:: Product code (' . $line_of_data[0] . ') Doesnt exist<br />'; 
    } 
    $count++; 
} 
echo $message; 

?> 

我不想導入此值,只是我要檢查是否存在並得到結果。

任何幫助表示讚賞。

+2

[**請不要在新代碼'mysql_ *'功能**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

+1

請停止使用'mysql_query'。你會讓自己陷入嚴重的困境,特別是對於這種隨意的態度,不能正確地逃避你的數據。 – tadman

+0

請注意,mysql_ *已棄用。改用mysqli或PDO :: query()。請注意使用。 – EirikO

回答

1

正如其他人所說,你應該真的使用PDO。但是,要回答你的問題,mysql_num_rows是你的解決方案。

$query = mysql_query("SELECT * FROM products WHERE code='$line_of_data[0]' AND alert_quantity = '$line_of_data[1]'") or die(mysql_error()); 

if (mysql_num_rows($query)) 
// Data is already in database 
else 
// Data not in database 
+0

不要忘記在檢查'mysql_num_rows($ query)' – Madbreaks

+0

之前檢查'$ query'如果$ query不正確,那麼mysql_num_rows將返回false。 – Kyle

+0

...你會得到一個通知(如果不是警告),說明'$ query'不是一個有效的資源。除此之外,你的代碼表明如果'mysql_num_rows'調用返回false,數據已經在數據庫中。但是如果查詢失敗呢?你沒有做足夠的錯誤處理。 – Madbreaks

0

請檢查mysql是否存在子查詢。

Exists and Not Exists subqueries

+0

你好,我剛剛更新了腳本,但我得到的結果是產品不存在 – Dar

+0

鏈接並不是一個答案,國際海事組織。 –