2017-09-12 2 views
0

Salut tout le monde j'ai un problème avec les comparateurs logiques en PHP quand j'utilise ADOdb Parce que quand je fais un select dans un tableau avec par exemple un CI, le resault n'est jamais NULL et je ne peux pas simplement vérifier si la personne existe avant l'insertPHP avec les compilateurs logiques ADOdb

CODE

<?php 
include('inc/php/adodb5/adodb.inc.php'); 
$db = ADONewConnection('mysql'); # eg. 'mysql' or 'oci8', 'postgresql' 
$db->debug = true; 

// Establecer datos para comunicarse con el Gestor de Bases de Datos. 
$server = "localhost"; 
$user  = "x"; 
$password = "x"; 
$database = "xs"; 

// Traemos cositas del formulario de index.php 
//$user=$_GET["username"]; 
$fecha = date('Y-m-d H:i:s'); 
$ci = $_GET["username"]; 


$db->Connect($server, $user, $password, $database) or die ("Se pudrio todo !"); 

$sql = "SELECT ciInterno_Persona_ciPersona FROM internos WHERE ciInterno_Persona_ciPersona = '".$ci."';"; 
       $rs = $db->Execute($sql); 
       /////////////////////////  
        if($rs){ 
         $sql = "INSERT INTO registrointernos VALUES ('', '0', '" .$fecha."', '".$ci."')"; 
         $db->Execute($sql); 
             }else{ 
               echo '<script language="javascript">alert("CI doesn't exist");</script>'; 
              } 
$rs->Close(); 
$db->Close(); 

?> 

le problème est que le résultat de la RS est toujours vrai même quand je mets un CI qui n'existe pas dans le tableau

Merci d'avance pour votre aide

Répondre

0

C'est parce que $db->Execute($sql); renvoie la classe dérivée de ADORecordSet si la requête a été exécutée avec succès (documentation here).

Vous devez faire quelque chose comme:

$rs = $db->Execute($sql); 
$rows = $rs->GetRows(); 
if (!empty($rows)) { 
    // ... 
} else { 
    // ... 
} 

Ou vous pouvez utiliser à la place $db->GetRow($sql)$db->Execute($sql).

+0

Mais je ne veux pas prendre une rangée, je veux juste une valeur spécifique, qui doit être le ci si elle existe, et si elle n'existe pas, rien du tout – WhySoBizarreCode

+0

@CodeSoBizarre Vous pouvez essayer ' GetCol' avec la limite 1, mais il sera aussi array ... Je n'ai pas trouvé de fonction dans ADODB qui retourne seulement 1 valeur scalaire, donc vous devez faire face à array ( –

+0

Yea bro, vous avez raison merci pour vos réponses. pour résoudre le problème je mets if ($ rs-> fields (0)) dans la phrase if, donc ça marche maintenant,;). – WhySoBizarreCode

0

Résolu, merci pour les réponses.

CODE ********

$sql = "sqlSentence"; 
$rs = $db->Execute($sql); 
if($rs->fields(0)){ 
} 

La solution est que vous devez prendre ce que les retours sql, choisissez la position et faire la comparaison logique. donc il est enregistré dans $ rs mais $ rs est comme un tableau donc vous devez mettre la position dans mon cas 0. et son travail parfaitement