Heim > PHP-Framework > Denken Sie an PHP > Wie thinkphp die gespeicherte SQLServer-Prozedur aufruft, um mehrere Ergebnismengen zurückzugeben

Wie thinkphp die gespeicherte SQLServer-Prozedur aufruft, um mehrere Ergebnismengen zurückzugeben

藏色散人
Freigeben: 2020-01-25 12:16:46
nach vorne
1993 Leute haben es durchsucht

Wie thinkphp die gespeicherte SQLServer-Prozedur aufruft, um mehrere Ergebnismengen zurückzugeben

Installieren Sie zunächst die Erweiterung

Windows

zweigeteilt Schritte

1. Suchen Sie die PDO-Erweiterung, die Ihrer PHP-Version entspricht, laden Sie sie herunter, entpacken Sie sie und aktivieren Sie die Erweiterung in php.ini. Sie müssen auf die PHP-Version achten und darauf, ob es sich um eine handelt sichere Version

2. ODBC-Treiber herunterladen https://docs.microsoft.com/zh-cn/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server -2017, nichts zu beachten. Laden Sie einfach das Installationspaket für Ihr System herunter

Linux ähnelt Windows, Sie können pecl direkt verwenden.

Wenn Sie es erfolgreich geladen haben, Sie können es natürlich in phpinfo() sehen. Wenn Sie Erweiterungen installieren und diese viele Probleme haben, werden Sie wirklich in Schwierigkeiten geraten.

thinkphp betreibt die gespeicherte Prozedur sqlsrv

Die tp-Version, die ich verwende, ist 5.0 und ich betreibe mehrere Datenbanken. Ich hoffe, dass sie für Sie hilfreich sein kann Konfigurationskonfigurationsdatei

 // 账号数据库
    'UserDBConn' =>  [
        'type'            => 'sqlsrv',
        // 服务器地址
        'hostname'        => '139.129.1.1',
        // 数据库名
        'database'        => 'DB3',
        // 用户名
        'username'        => 'xxxx',
        // 密码
        'password'        => 'tt123!@#',
        // 端口
        'hostport'        => '5188'
    ],
    // 金币数据库
    'ScoreDBConn' =>  [
        'type'            => 'sqlsrv',
        // 服务器地址
        'hostname'        => '139.129.1.1',
        // 数据库名
        'database'        => 'DB2',
        // 用户名
        'username'        => 'xxxx',
        // 密码
        'password'        => 'tt123!@#',
        // 端口
        'hostport'        => '5188'
    ],
    // 记录数据库
    'RecordDBConn' =>  [
        'type'            => 'sqlsrv',
        // 服务器地址
        'hostname'        => '139.129.1.1',
        // 数据库名
        'database'        => 'DB1',
        // 用户名
        'username'        => 'xxxx',
        // 密码
        'password'        => 'tt123!@#',
        // 端口
        'hostport'        => '5188'
    ],
Nach dem Login kopieren

thinkphp/library/think/Model.php ändern

Anhängen

 /**
     * @param $DbconnName
     */
    protected function Dbconn($DbconnName){
        try{
            $conn = Db::connect($DbconnName);
        }catch (\InvalidArgumentException $e){
            echo '连接异常';
            die;
        }
        return $conn;
    }
Nach dem Login kopieren

Modell am Ende hinzufügen

Agent.phpSie können query sowohl zum Abfragen als auch zum Hinzufügen, Löschen und Ändern aufrufen. Wenn Sie nicht über die Ergebnismenge verfügen, die Sie erhalten möchten, können Sie „execute()“ aufrufen.

query() hat einen Nachteil. Wenn die Form Ihrer Bindungsparameter (Nicht-Parameterbindung) direkt in SQL geschrieben wird, kann es sein, dass es sich nicht um eine gespeicherte Prozedur handelt Überprüfen Sie Zeile 368 von thinkphp/library/think/db/Connection.php auf die spezifische Implementierung. Natürlich wird kein Ergebnissatz zurückgegeben.

Sie können auch

aufrufen. Wenn diese Methode aufgerufen wird, wird die Ergebnismenge zurückgegeben.

Ich hatte dieses Problem zuerst nicht in Form von gebundenen Parametern, ich konnte die Ergebnismenge später nicht hinzufügen Ich habe die Antwort kaum erhalten. Am Ende des Artikels habe ich ein Beispiel für die Lösung gegeben, die ich ursprünglich erhalten hatte, aber sie war wirklich durcheinander. Sie können einen Blick darauf werfen und sich nicht beschweren.

class Agent extends Model
{
    public $Dbname = 'UserDBConn';
    public function GetIndirectAgentList($agentId,$strAccount,$strSuperior,$iPageIndex,$pagesize)
    {
        $conn = $this->Dbconn($this->Dbname);
        try{
            $TotalCount = 0;
            $res = $conn::query('exec [dbo].[Agent_GetAgentList] :agentId,:strAccount,:strSuperior,:iPageIndex,:pagesize,:TotalCount', [
                'agentId' => $agentId,
                'strAccount' => [$strAccount, PDO::PARAM_STR],
                'strSuperior' => [$strSuperior, PDO::PARAM_STR],
                'iPageIndex' => [$iPageIndex, PDO::PARAM_INT],
                'pagesize' => [$pagesize, PDO::PARAM_INT],
                'TotalCount' => [$TotalCount, PDO::PARAM_INPUT_OUTPUT],
            ]);
        }catch (PDOException $e)
        {
            return false;
        }
        return $res;
    }
}
Nach dem Login kopieren
procedure()Das Original

erhält hier offensichtlich kein

und Agent.php; es gibt nur die Ergebnismenge von

public function GetIndirectAgentList($agentId,$strAccount,$strSuperior,$iPageIndex,$pagesize)
    {
        $conn = $this->Dbconn($this->Dbname);
        try{
            $res = $conn->query('
                SET NOCOUNT ON;
                declare @AgentID int;
                declare @TotalCount int;
                exec [dbo].[Agent_GetAgentList] '.$agentId.',\''.$strAccount.'\',\''.$strSuperior.'\','.$iPageIndex.','.$pagesize.',@TotalCount output;
                select @AgentID as AgentID,@TotalCount as TotalCount
                ');
        }catch (PDOException $e)
        {
            return false;
        }
        return $res;
}
Nach dem Login kopieren
@AgentIDFor zurück Weitere verwandte ThinkPHP-Kenntnisse finden Sie im @TotalCountThinkPHP-TutorialAgent_GetAgentList!

Das obige ist der detaillierte Inhalt vonWie thinkphp die gespeicherte SQLServer-Prozedur aufruft, um mehrere Ergebnismengen zurückzugeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage