8791 sujets

Développement web côté serveur, CMS

Bonjour,
malgré les nombreux tutos et pages de forum traitant de mon pb, je n'arrive pas à le résoudre.

Je cherche simplement à vérifier qu'une entrée existe dans une base sqlserver 2005, si elle n'existe pas, je la crée, si elle existe je la modifie.

Alors voila j'ai beau essayer dans tous les sens mais a chaque fois, soit il m'en crée une nouvelle tout le temps, soit il ne fait rien.

La en l'occurence il m'en crée une nouvelle tout le temps.
Voici mon code :

		//Partie Instant_Table:
		// On verifie si le serveur existe deja
		$return1= NULL;
		
		$query = "	SELECT COUNT(*) FROM Instant_Table WHERE (server_id = '$server')";
		
		if(isset($query)){
			try {
				$return1 = $bdd->query($query);
			} catch(PDOException $pdoE) {
				echo '<br>ERREUR PDO:<br>'.$pdoE -> getMessage();
			} catch(Exception $e) {
				echo '<br>AUTRE ERREUR:<br>'.$e -> getMessage();
			}
		}else{};
		
			while ($donnees = $return1->fetch()) {		
				echo 'la valeur de return1 est :'.mssql_num_rows($return1).'!</br>';
			};



		if(mssql_num_rows($return1) > 0){
//si le serveur y est.
		// On modifie seulement les champs Status, cat, comingback et type de pause.	
			$req = $bdd->prepare("UPDATE Instant_Table SET server_id = :server_id, cat = :cat, status = :status, paused_time = [langue]aused_time WHERE server_id = '$server'")or die(print_r($req->errorInfo()));
			$req->execute(array(
				'server_id' => $server,
				'cat' => $cat,
				'status' => $statut,
				'paused_time' => $duree,
				// 'coming_back' => $back,
			))or die(print_r($req->errorInfo()));
			echo "le serveur est dans la liste : on a modifié un champ";
		}
		
		else{		
		// Si le server n'est pas dans la liste, On ajoute une entrée dans la table Instant_Table
			$req = $bdd->prepare('INSERT INTO Instant_Table(server_id, cat, status, paused_time) VALUES(:server_id, :cat, :status, [langue]aused_time)')or die(print_r($req->errorInfo()));
			$req->execute(array(
				'server_id' => $server,
				'cat' => $cat,
				'status' => $statut,
				'paused_time' => $duree,
				//'coming_back' => $back,
			))or die(print_r($req->errorInfo()));
			echo "le serveur n'est pas dans la liste : on a crée une nouveau champ </br>";			
		};

A noter que mssql_num_rows($return1) ne retourne jamais rien ... je ne sais pas comment lire le nombre de lignes retournées, or le retour de ma requete me donne un nb positif quand je le teste directement sql server 2005.

Merci de prendre la peine de m'aider Smiley smile

EDIT:C'est bon j'ai réussi à trouver, il falait faire comme suit (je précise afin que cela puisse resservir):

//Partie Instant_Table:
		// On verifie si le serveur existe deja
		$return1= NULL;
		
		$query = "	SELECT COUNT(*) as exist FROM Instant_Table WHERE (server_id = '$server')";
		
		if(isset($query)){
			try {
				$return1 = $bdd->query($query);
			} catch(PDOException $pdoE) {
				echo '<br>ERREUR PDO:<br>'.$pdoE -> getMessage();
			} catch(Exception $e) {
				echo '<br>AUTRE ERREUR:<br>'.$e -> getMessage();
			}
		}else{};
		
		$donnees = $return1->fetch();

		if($donnees['exist'] !=0){
		//si le serveur y est.
		// On modifie seulement les champs Status, cat, comingback et type de pause.
			$req = $bdd->prepare("UPDATE Instant_Table SET server_id = :server_id, cat = :cat, status = :status, paused_time = [langue]aused_time WHERE server_id = '$server'")or die(print_r($req->errorInfo()));
			$req->execute(array(
				'server_id' => $server,
				'cat' => $cat,
				'status' => $statut,
				'paused_time' => $duree,
				// 'coming_back' => $back,
			))or die(print_r($req->errorInfo()));
			echo "le serveur est dans la liste : on a modifié un champ";
		}
	
		else{		
		// Si le server n'est pas dans la liste, On ajoute une entrée dans la table Instant_Table
			$req = $bdd->prepare('INSERT INTO Instant_Table(server_id, cat, status, paused_time) VALUES(:server_id, :cat, :status, [langue]aused_time)')or die(print_r($req->errorInfo()));
			$req->execute(array(
				'server_id' => $server,
				'cat' => $cat,
				'status' => $statut,
				'paused_time' => $duree,
				//'coming_back' => $back,
			))or die(print_r($req->errorInfo()));
			echo "le serveur n'est pas dans la liste : on a crée une nouveau champ </br>";			
		};

Modifié par dekker (13 Dec 2010 - 17:04)