Fatal error: Call to undefined function mssql_connect() in C:\AppServ\Apache24\htdocs\C_DBHandler.inc using apache 2.4 and php5.6
Fatal error: Call to undefined function mssql_connect() in C:\AppServ\Apache24\htdocs\C_DBHandler.inc using apache 2.4 and php5.6
我从 php 版本 2.2 升级到 2.4 和 php 5.6。问题是新的 php 函数不支持 mssql_connect 所以我为 sqlsvr 安装了新的驱动程序,当我建立数据库连接时它工作正常。
我需要一些帮助。我怎样才能将此代码从 mssql 更改为 sqlsvr 谢谢你,我正在等待你的回答。
<?php
class C_DBHandler
{
private $db_Host = ""; // Host, auf dem die DB läuft
private $db_Database = ""; // zu verwendetende Database
private $db_User = ""; // User und Paßwort für Login
private $db_Password = "";
private $db_Link = 0; // Resultat des connect()
private $db_Query = 0; // Resultat des query()
private $db_Record = array(); // aktuelles fetch_array()-Ergebnis
private $db_Row; // Aktuelle Ergebniszeile
private $db_numRows = "";
private $LSDconf = "";
private $LSDDBconf = "";
private static $instance; // Klasseninstanzname
public function __get($property){
$Err = C_GetHDL();
$Err->SetSubject("LSD-Error (property)");
$Err->SetBody("Attempt to read from not existing property \"$property\". Class: \"".__CLASS__."\"; Triggered by User: \"".$_SESSION['ULogin']."\"");
$Err->SendAdminInfo("mail_db");
}
public function __set($property, $val){
$Err = C_FuncHandler::GetHDL();
$Err->SetSubject("LSD-Error (property)");
$Err->SetBody("Attempt to write \"$val\" to not existing property \"$property\". Class: \"".__CLASS__."\"; Triggered by User: \"".$_SESSION['ULogin']."\"");
$Err->SendAdminInfo("mail_db");
}
function __autoload($className){
$fileName = $className.'.inc';
require($fileName);
}
private function __construct(){
require ('config.inc');
require ('DB-config.inc');
$this->LSDconf = $LSDconf;
$this->LSDDBconf = $LSDDBconf;
}
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
public static function GetHDL()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
private function connect() {
$this->db_Host = $this->LSDDBconf['DBSec']['host'];
$this->db_Database = $this->LSDDBconf['DBSec']['dbname'];
$this->db_Password = $this->LSDDBconf['DBSec']['pwd'];
$this->db_User = $this->LSDDBconf['DBSec']['user'];
if ( 0 == $this->db_Link ) {
$this->db_Link=mssql_connect($this->db_Host, $this->db_User, $this->db_Password);
if (!$this->db_Link) {
die("<br><br><b><font color=\"red\">Invalid SQL connect-DB</font></b>");
}
if (!mssql_select_db($this->db_Database,$this->db_Link)) { $Err->SendAdminInfo("mail_db");
die("<br><br><b><font color=\"red\">Invalid SQL select-DB</font></b>");
}
}
}
public function query($Query_String) {
$this->connect();
$this->db_Query = mssql_query($Query_String,$this->db_Link);
$this->db_Row = 0;
if (!$this->db_Query) {
die("<br><br><b><font color=\"red\">Invalid SQL Query</font></b>");
}
return $this->db_Query;
}
public function next_record() {
$this->db_Record = mssql_fetch_array($this->db_Query);
$this->db_Row += 1;
return $this->db_Record;
}
public function num_rows(){
$this->db_numRows = mssql_num_rows($this->db_Query);
return $this->db_numRows;
}
public function rows_affected(){
$this->db_Query = mssql_query("SELECT @@ROWCOUNT", $this->db_Link);
$this->db_numRows = mssql_fetch_row($this->db_Query);
return $this->db_numRows[0];
}
public function mssql_addslashes($MyString) {
$MyString = str_replace("'", "''", $MyString);
return $MyString;
}
public function Setdb_Query($val){
$this->db_Query = $val;
}
public function Getdb_Query(){
return $this->db_Query;
}
}
?>
如果您安装了新库,您可能需要将 mssql_connect()
替换为 sqlsrv_connect()
。实际上所有的 mssql 函数都可以被替换。
这是第一个快速的想法:-)
顺便说一句:mssql_connect()
仅从 php 7 中删除,到目前为止应该在 php 5.6 中工作:http://php.net/manual/en/function.mssql-connect.php
为了从 MSSQL 迁移到 PHP 的 SQLSRV 扩展必须进行的更改:
连接:
函数 mssql_connect()
和 mssql_select_db()
必须替换为 sqlsrv_connect()
:
public function connect() {
$this->db_Host = $this->LSDDBconf['DBSec']['host'];
$this->db_Database = $this->LSDDBconf['DBSec']['dbname'];
$this->db_Password = $this->LSDDBconf['DBSec']['pwd'];
$this->db_User = $this->LSDDBconf['DBSec']['user'];
if ( 0 == $this->db_Link ) {
$this->db_Link = sqlsrv_connect($this->db_Host, array("Database"=>$this->db_Database, "UID"=>$this->db_User, "PWD"=>$this->db_Password));
if ($this->db_Link === false) {
$Err->SendAdminInfo("mail_db");
die("<br><br><b><font color=\"red\">Invalid SQL connect-DB</font></b>");
exit;
}
}
}
查询:
public function query($Query_String) {
$this->connect();
# SQLSRV_CURSOR_FORWARD - Lets you move one row at a time starting at the first row of the result set until you reach the end of the result set.
# This is the default cursor type. sqlsrv_num_rows returns an error for result sets created with this cursor type.
# SQLSRV_CURSOR_STATIC - Lets you access rows in any order but will not reflect changes in the database.
# SQLSRV_CURSOR_DYNAMIC - Lets you access rows in any order and will reflect changes in the database.
# sqlsrv_num_rows returns an error for result sets created with this cursor type.
# SQLSRV_CURSOR_KEYSET - Lets you access rows in any order. However, a keyset cursor does not update the row count if a row is deleted from the
# table (a deleted row is returned with no values).
# SQLSRV_CURSOR_CLIENT_BUFFERED - Lets you access rows in any order. Creates a client-side cursor query.
$this->db_Query = sqlsrv_query($this->db_Link, $Query_String, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
$this->db_Row = 0;
if (!$this->db_Query) {
die("<br><br><b><font color=\"red\">Invalid SQL Query</font></b>");
}
return $this->db_Query;
}
获取记录:
public function next_record() {
# SQLSRV_FETCH_ASSOC - sqlsrv_fetch_array returns the next row of data as anassociative array.
# SQLSRV_FETCH_BOTH - sqlsrv_fetch_array returns the next row of data as an array with both numeric and associative keys. This is the default value.
# SQLSRV_FETCH_NUMERIC - sqlsrv_fetch_array returns the next row of data as a numerically indexed array
$this->db_Record = sqlsrv_fetch_array($this->db_Query, SQLSRV_FETCH_BOTH);
$this->db_Row += 1;
return $this->db_Record;
}
行数:
public function num_rows(){
# sqlsrv_num_rows requires a client-side, static, or keyset cursor, and will return false if you use a forward cursor or
# a dynamic cursor. (A forward cursor is the default.) For more information about cursors, see sqlsrv_query and Cursor Types (SQLSRV Driver).
$this->db_numRows = sqlsrv_num_rows($this->db_Query);
return $this->db_numRows;
}
public function rows_affected(){
$this->db_Query = sqlsrv_query($this->db_Link, "SELECT @@ROWCOUNT");
$this->db_numRows = sqlsrv_fetch_array($this->db_Query, SQLSRV_FETCH_NUMERIC);
return $this->db_numRows[0];
}
备注:
您可以阅读Brian Swan's article and Microsoft documentation。
我从 php 版本 2.2 升级到 2.4 和 php 5.6。问题是新的 php 函数不支持 mssql_connect 所以我为 sqlsvr 安装了新的驱动程序,当我建立数据库连接时它工作正常。
我需要一些帮助。我怎样才能将此代码从 mssql 更改为 sqlsvr 谢谢你,我正在等待你的回答。
<?php
class C_DBHandler
{
private $db_Host = ""; // Host, auf dem die DB läuft
private $db_Database = ""; // zu verwendetende Database
private $db_User = ""; // User und Paßwort für Login
private $db_Password = "";
private $db_Link = 0; // Resultat des connect()
private $db_Query = 0; // Resultat des query()
private $db_Record = array(); // aktuelles fetch_array()-Ergebnis
private $db_Row; // Aktuelle Ergebniszeile
private $db_numRows = "";
private $LSDconf = "";
private $LSDDBconf = "";
private static $instance; // Klasseninstanzname
public function __get($property){
$Err = C_GetHDL();
$Err->SetSubject("LSD-Error (property)");
$Err->SetBody("Attempt to read from not existing property \"$property\". Class: \"".__CLASS__."\"; Triggered by User: \"".$_SESSION['ULogin']."\"");
$Err->SendAdminInfo("mail_db");
}
public function __set($property, $val){
$Err = C_FuncHandler::GetHDL();
$Err->SetSubject("LSD-Error (property)");
$Err->SetBody("Attempt to write \"$val\" to not existing property \"$property\". Class: \"".__CLASS__."\"; Triggered by User: \"".$_SESSION['ULogin']."\"");
$Err->SendAdminInfo("mail_db");
}
function __autoload($className){
$fileName = $className.'.inc';
require($fileName);
}
private function __construct(){
require ('config.inc');
require ('DB-config.inc');
$this->LSDconf = $LSDconf;
$this->LSDDBconf = $LSDDBconf;
}
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
public static function GetHDL()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
private function connect() {
$this->db_Host = $this->LSDDBconf['DBSec']['host'];
$this->db_Database = $this->LSDDBconf['DBSec']['dbname'];
$this->db_Password = $this->LSDDBconf['DBSec']['pwd'];
$this->db_User = $this->LSDDBconf['DBSec']['user'];
if ( 0 == $this->db_Link ) {
$this->db_Link=mssql_connect($this->db_Host, $this->db_User, $this->db_Password);
if (!$this->db_Link) {
die("<br><br><b><font color=\"red\">Invalid SQL connect-DB</font></b>");
}
if (!mssql_select_db($this->db_Database,$this->db_Link)) { $Err->SendAdminInfo("mail_db");
die("<br><br><b><font color=\"red\">Invalid SQL select-DB</font></b>");
}
}
}
public function query($Query_String) {
$this->connect();
$this->db_Query = mssql_query($Query_String,$this->db_Link);
$this->db_Row = 0;
if (!$this->db_Query) {
die("<br><br><b><font color=\"red\">Invalid SQL Query</font></b>");
}
return $this->db_Query;
}
public function next_record() {
$this->db_Record = mssql_fetch_array($this->db_Query);
$this->db_Row += 1;
return $this->db_Record;
}
public function num_rows(){
$this->db_numRows = mssql_num_rows($this->db_Query);
return $this->db_numRows;
}
public function rows_affected(){
$this->db_Query = mssql_query("SELECT @@ROWCOUNT", $this->db_Link);
$this->db_numRows = mssql_fetch_row($this->db_Query);
return $this->db_numRows[0];
}
public function mssql_addslashes($MyString) {
$MyString = str_replace("'", "''", $MyString);
return $MyString;
}
public function Setdb_Query($val){
$this->db_Query = $val;
}
public function Getdb_Query(){
return $this->db_Query;
}
}
?>
如果您安装了新库,您可能需要将 mssql_connect()
替换为 sqlsrv_connect()
。实际上所有的 mssql 函数都可以被替换。
这是第一个快速的想法:-)
顺便说一句:mssql_connect()
仅从 php 7 中删除,到目前为止应该在 php 5.6 中工作:http://php.net/manual/en/function.mssql-connect.php
为了从 MSSQL 迁移到 PHP 的 SQLSRV 扩展必须进行的更改:
连接:
函数 mssql_connect()
和 mssql_select_db()
必须替换为 sqlsrv_connect()
:
public function connect() {
$this->db_Host = $this->LSDDBconf['DBSec']['host'];
$this->db_Database = $this->LSDDBconf['DBSec']['dbname'];
$this->db_Password = $this->LSDDBconf['DBSec']['pwd'];
$this->db_User = $this->LSDDBconf['DBSec']['user'];
if ( 0 == $this->db_Link ) {
$this->db_Link = sqlsrv_connect($this->db_Host, array("Database"=>$this->db_Database, "UID"=>$this->db_User, "PWD"=>$this->db_Password));
if ($this->db_Link === false) {
$Err->SendAdminInfo("mail_db");
die("<br><br><b><font color=\"red\">Invalid SQL connect-DB</font></b>");
exit;
}
}
}
查询:
public function query($Query_String) {
$this->connect();
# SQLSRV_CURSOR_FORWARD - Lets you move one row at a time starting at the first row of the result set until you reach the end of the result set.
# This is the default cursor type. sqlsrv_num_rows returns an error for result sets created with this cursor type.
# SQLSRV_CURSOR_STATIC - Lets you access rows in any order but will not reflect changes in the database.
# SQLSRV_CURSOR_DYNAMIC - Lets you access rows in any order and will reflect changes in the database.
# sqlsrv_num_rows returns an error for result sets created with this cursor type.
# SQLSRV_CURSOR_KEYSET - Lets you access rows in any order. However, a keyset cursor does not update the row count if a row is deleted from the
# table (a deleted row is returned with no values).
# SQLSRV_CURSOR_CLIENT_BUFFERED - Lets you access rows in any order. Creates a client-side cursor query.
$this->db_Query = sqlsrv_query($this->db_Link, $Query_String, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
$this->db_Row = 0;
if (!$this->db_Query) {
die("<br><br><b><font color=\"red\">Invalid SQL Query</font></b>");
}
return $this->db_Query;
}
获取记录:
public function next_record() {
# SQLSRV_FETCH_ASSOC - sqlsrv_fetch_array returns the next row of data as anassociative array.
# SQLSRV_FETCH_BOTH - sqlsrv_fetch_array returns the next row of data as an array with both numeric and associative keys. This is the default value.
# SQLSRV_FETCH_NUMERIC - sqlsrv_fetch_array returns the next row of data as a numerically indexed array
$this->db_Record = sqlsrv_fetch_array($this->db_Query, SQLSRV_FETCH_BOTH);
$this->db_Row += 1;
return $this->db_Record;
}
行数:
public function num_rows(){
# sqlsrv_num_rows requires a client-side, static, or keyset cursor, and will return false if you use a forward cursor or
# a dynamic cursor. (A forward cursor is the default.) For more information about cursors, see sqlsrv_query and Cursor Types (SQLSRV Driver).
$this->db_numRows = sqlsrv_num_rows($this->db_Query);
return $this->db_numRows;
}
public function rows_affected(){
$this->db_Query = sqlsrv_query($this->db_Link, "SELECT @@ROWCOUNT");
$this->db_numRows = sqlsrv_fetch_array($this->db_Query, SQLSRV_FETCH_NUMERIC);
return $this->db_numRows[0];
}
备注:
您可以阅读Brian Swan's article and Microsoft documentation。