2013-01-15 3 views
0

J'ai un petit script pour télécharger des données dans la base de données mysql à partir d'un fichier csv et je veux vérifier la liste des valeurs qui sont à l'intérieur du fichier csv.Vérifiez si la valeur existe dans mysql

fichier CSV:

code,alert_quantity 
12345,10 

fichier 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; 

?> 

Je ne veux pas importer ces valeurs, juste que je veux vérifier si elles existent et obtenir le résultat.

Toute aide est appréciée.

+2

[** S'il vous plaît, ne pas utiliser les fonctions de '' mysql_ * dans un nouveau code **] (http://bit.ly/phpmsql). Ils ne sont plus maintenus [et sont officiellement obsolètes] (https://wiki.php.net/rfc/mysql_deprecation). Voir la [** boîte rouge **] (http://j.mp/Te9zIL)? En savoir plus sur [* instructions préparées *] (http://j.mp/T9hLWi) à la place, et utiliser [PDO] (http://php.net/pdo) ou [MySQLi] (http://php.net/ mysqli) - [cet article] (http://j.mp/QEx8IB) vous aidera à décider lequel. Si vous choisissez PDO, [voici un bon tutoriel] (http://j.mp/PoWehJ). –

+1

Veuillez arrêter d'utiliser 'mysql_query'. Vous allez vous mettre sérieusement en difficulté, surtout avec cette attitude désinvolte de ne pas échapper à vos données correctement. – tadman

+0

Veuillez noter que mysql_ * est obsolète. Utilisez mysqli ou PDO :: query() à la place. Utilisez pour vous remarquez. – EirikO

Répondre

1

Comme d'autres l'ont dit, vous devriez vraiment utiliser PDO. Mais, pour répondre à votre question, mysql_num_rows est votre solution.

$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

N'oubliez pas de vérifier '$ query' avant de vérifier' mysql_num_rows ($ query) ' – Madbreaks

+0

Il n'y a pas besoin de cela, si la requête $ est mauvaise alors mysql_num_rows retournera false. – Kyle

+0

... et vous obtiendrez un avis (sinon un avertissement) indiquant que $ query n'est pas une ressource valide. Au-delà, votre code suggère que si l'appel 'mysql_num_rows' renvoie false, les données sont déjà dans la base de données. Mais que faire si la requête a échoué? Vous ne faites pas suffisamment de gestion des erreurs. – Madbreaks

0

Veuillez vérifier que mysql existe sous-requêtes.

Exists and Not Exists subqueries

+0

Bonjour, je viens de mettre à jour le script, mais je reçois le résultat que le produit n'existe pas – Dar

+0

Un lien n'est pas beaucoup d'une réponse, IMO. –

Questions connexes