2013-09-02 4 views
6

Ich verwende SQL server2008 als Datenbank und ich habe gespeicherte Prozedur in MSSQL Server 2008 geschrieben. Es funktioniert gut in MSSQL Server 2008. Ich möchte diese Stored Procedure von codeigniter aufrufen. Dazu schrieb ich den Code wie folgt aus:Get Data from Stored Procedure mit Sqlsrv Treiber

phpService.php:

public function Login($username, $password) 
{ 
    $this->load->model('Apimodel'); 
    $result = $this->Apimodel->Login($username,$password); 

    header('Content-type: application/json'); 
    echo json_encode(array('LoginResponce'=>$result)); 
} 

apimodel.php:

function Login($UserName,$Password) 
{    
    $this->db = $this->GetDB(); 
    $query = $this->db->query("EXEC Login"); 

    return $query->result(); 

} 

wenn ich Prozedur ausführen, ohne Parameter es adaequat

function Login($UserName,$Password) 
    {    
     $this->db = $this->GetDB(); 
     $query = $this->db->query("EXEC Login '$UserName','$Password'"); 

     return $query->result(); 

    } 

Aber, wenn ich Prozedur ausführen mit dem Parameter arbeitet es nicht

Kann mir jemand sagen, was ich hier fehlt?

Vielen Dank im Voraus

+0

könnte dies helfen http://ellislab.com/forums/viewthread/202515/ –

+0

@Deepanshu: Ich bin nicht von diesem Link bekommen. kannst du mir erklären ? –

+1

Haben Sie versucht, gebundene Parameter zu verwenden? '$ this-> db-> query (" Ausführen Login?,? ", array ($ UserName, $ Password));' Das verhindert Fehler, wenn das Passwort ein Anführungszeichen enthält. – mcrumley

Antwort

0

oh .............. nachdem ich Nationalstandard

PhpService.php lange RND bekam:

public function Login($username, $password) 
    { 

     $this->load->model('Apimodel'); 
     $result = $this->Apimodel->Login($username,$password); 

     header('Content-type: application/json'); 
     echo json_encode(array('LoginResponce'=>$result)); 

    } 

apimodel.php:

function Login($username, $password) 
    { 
     $this->db = $this->GetDB(); 
     $query = $this->db->query("EXEC Login $username,$password"); 

     return $query->result(); 
    } 
1

Vor allem, wenn Sie Codeigniter verwenden, empfehle ich die Datenbank-Klasse verwenden, um MSSQL Server zu verbinden. Sie können hier mehr dazu lesen: http://ellislab.com/codeigniter/user-guide/database/configuration.html

Wenn Sie Ihre Datenbank nicht automatisch verbinden, sind Sie so eine Verbindung herstellen können: $this->load->database('default');

Sobald Sie Ihre Konfiguration eingerichtet haben, können Sie eine Funktion wie diese haben in Ihr Modell:

function login($username, $password) { 
    return $this->db->query("EXEC spLogin '$username', '$password'")->result(); 
} 
+0

Fataler Fehler: Aufruf an eine Member-Funktion result() auf ein Nicht-Objekt in \ apimodel.php in Zeile 87 ... $ query = $ this-> db-> query ("EXEC Common_Login ($ username, $ password)"); –

+0

Klingt, als ob Sie immer noch nicht die Datenbankklassen von CI verwenden. Stellen Sie sicher, dass Sie es lesen und Modelle: http://ellislab.com/codeigniter/user-guide/database/index.html und http://ellislab.com/codeigniter/user-guide/general/models.html. Und stellen Sie sicher, dass Sie Ihre Strings in einfache Anführungszeichen setzen. – mcryan

+0

Wenn ich Execute-Prozedur ohne Parameter, dann funktioniert es gut, aber mit Parameter funktioniert es nicht –