2017-09-27 4 views
0

Tout fonctionne correctement, sauf pour déclencher une procédure stockée à partir de mon modèle et commence à afficher un appel à une fonction membre result() sur la ligne d'erreur booléenne.Appel à une fonction membre result() sur erreur booléenne après le passage à sqlsrv dbdriver

Voici un exemple de code sans utiliser de SP, cela fonctionne très bien.

function get_myeligible_info($id) 
{ 
    $sql = "SELECT * FROM emp_list_manila where employee_empid = '".$id."'"; 
    $query = $this->db->query($sql); 
    return $query->result(); 
} 

et voici le code exact qui montre une erreur.

function get_for_batch_insert2() 
{ 

$query = $this->db->query("[INSERT_TTUMBATCH]"); 
return $query->result(); //ERROR HERE 

} 

framework d'applications Web: Codeigniter 3 Database: MS SQL

+0

Que fait la procédure stockée? Est-ce qu'il renvoie un ensemble de résultats? – ZLK

+0

Oui, il sélectionne une donnée d'une table et l'insère en même temps. –

+0

Vous devrez peut-être envisager d'utiliser 'SET NOCOUNT ON;' alors au début de votre procédure stockée. Cela empêchera le traitement de l'insertion en tant que jeu de résultats (qui ne renvoie aucune ligne). Il y a d'autres façons de contourner cela, mais j'imagine que c'est probablement ce qui cause votre problème. – ZLK

Répondre

0

Pour commencer, ne jamais mettre les variables directement dans une requête. Utilisez toujours parameter binding comme ceci:

function get_myeligible_info($id) 
{ 
    $sql = "SELECT * FROM emp_list_manila WHERE employee_empid = ?"; 
    $query = $this->db->query($sql, [$id]); 
    return $query->result(); 
} 

Pour les procédures stockées, vous ne pouvez pas les appeler par leur nom, you have to use EXEC:

function get_for_batch_insert2() 
{ 
    $query = $this->db->query("EXEC INSERT_TTUMBATCH"); 
    return $query->result(); 
} 

Pour ces deux appels, vous devriez vérifier pour les erreurs et le traitement des les convenablement:

function get_for_batch_insert2() 
{ 
    $query = $this->db->query("EXEC INSERT_TTUMBATCH"); 
    if ($query) { 
     return $query->result(); 
    } else { 
     return false; 
    } 
} 
+0

Merci, cela fonctionne maintenant, noté sans mettre les variables dans la requête. –