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' ],
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; }
Modell am Ende hinzufügen
Agent.php
Sie 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; } }
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; }
@AgentID
For zurück Weitere verwandte ThinkPHP-Kenntnisse finden Sie im @TotalCount
ThinkPHP-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!