Seit PHP mit VC9 compiliert wird (XAMPP > 1.7.4), wird diese Extension nicht mehr unterstützt.
Goggelt man z.B. nach "php_mssql.dll php 5.3.8" findet man hunderte Einträge und den Verweis auf den neuen Treiber von MS
Microsoft Drivers 2.0/3.0 for SQL Server for PHP
http://www.microsoft.com/download/en/details.aspx?id=20098
Enthalten ist die Extension php_sqlsrv_53_ts.dll. Diese ist statt der php_mssql.dll in der php.ini einzubinden
Zusammen mit einem passenden "SQL Server 20xx Native Client" bekommt man wieder Zugriff auf den MS SQL-Server.
Aber...
Man muss auch die dazugehörigen Funktionen nutzen!
Siehe http://de.php.net/manual/en/book.sqlsrv.php
Hat man ein bestehendes Projekt, dann ist das eine ganze Menge Arbeit.
Um sich diese Arbeit zu sparen habe ich mir ein paar Funktionen geschrieben und in eine include-Datei gepackt.
Bindet man diese in sein Projekt ein, stehen einem die wichtigsten mssql-Funktionen wieder zur Verfügung - eine Art Simulator / Class Mapper.
Ich konnte damit fast alle meine Projekte innerhalb von wenigen Minuten auf die neuen sqlsrv-Funktionen umstellen.
Zum Testen taugt das allemal. Xampp ist ja ausdrücklich NICHT für den Produktiveinsatz gedacht und genauso sehe ich das Script!
Ist sicherlich kein Meisterwerk.
Aber wers gebrauchen kann?!
In den Kommentaren ist auch Code für eine Beispielanwendung vorhanden.
- Code: Select all
<?php
#################################
# php_mssql.dll Class Mapper #
# #
# Version 0.1 BETA - 2012-04-20 #
# marthom@dreambox-tools.info #
# #
# tested under: #
# XAMPP 1.7.7 - PHP 5.3.8 #
# #
#################################
# FOR USE AT YOUR OWN RISK !!! #
#################################
/*
File - inc_config.php:
<?php
# define global access vars
$sql_db_server = "SQLSERVER-NAME OR IP";
$sql_db_user = "SQL-USER";
$sql_db_pass = "SQL-PASSWORD";
require_once "inc_sqlsrv_mssql.php";
if (!$con = mssql_connect($sql_db_server, $sql_db_user, $sql_db_pass)) {
die(mssql_get_last_message());
}
?>
File - testmssql.php:
<?php
require_once "inc_config.php";
echo "<br><br>Server:<br>";
$server_info = sqlsrv_server_info($con);
if ($server_info) {
foreach ($server_info as $key => $value) {
echo $key . ": " . $value . "<br />";
}
} else {
die(print_r(sqlsrv_errors(), true));
}
# =================================
echo "<br><br>Client:<br>";
if ($client_info = sqlsrv_client_info($con)) {
foreach ($client_info as $key => $value) {
echo $key.": ".$value."<br />";
}
} else {
echo "Error in retrieving client info.<br />";
}
echo "<br><br>SELECT:<br>";
$sql = "SELECT * FROM [faq].[dbo].[Cron] ";
$rs = mssql_query($sql, $con);
echo "Count rows: " . mssql_num_rows($rs);
echo "<br>";
echo "Count Fields: " . mssql_num_fields($rs);
echo "<br>";
for ($i = 0; $i < mssql_num_fields($rs); ++$i) {
echo ' - ' . mssql_field_name($rs, $i) . "<br>";
}
echo "<br>";
while ($row = mssql_fetch_array($rs)) {
foreach ($row as $field) {
echo $field;
echo "<br>";
}
}
?>
*/
if (!extension_loaded('mssql')) {
function mssql_connect($server, $user = "", $pw = "") {
$conInfoAry = array("UID"=>$user, "PWD"=>$pw);
return sqlsrv_connect($server, $conInfoAry);
}
function mssql_pconnect($server_name, $dbuser, $dbpass) {
return mssql_connect($server_name, $dbuser, $dbpass);
}
function mssql_select_db($databasename, $con) {
# use global access vars (from inc_config.php)
global $sql_db_server, $sql_db_user, $sql_db_pass;
$conectionInfo = array("UID"=>$sql_db_user, "PWD"=>$sql_db_pass, "Database"=>$databasename);
$con = sqlsrv_connect($sql_db_server, $conectionInfo);
if ($con === false) {
mssql_get_last_message();
}
}
function mssql_query($sql, $con) {
$query_params = array();
$query_options = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
return sqlsrv_query($con, $sql, $query_params, $query_options);
}
function mssql_fetch_object($rs) {
return _ArrayToObject(sqlsrv_fetch_array($rs, SQLSRV_FETCH_ASSOC));
}
function mssql_fetch_array($rs) {
return sqlsrv_fetch_array($rs, SQLSRV_FETCH_ASSOC);
}
function mssql_fetch_assoc($rs) {
return mssql_fetch_array($rs);
}
function mssql_fetch_row($rs) {
return sqlsrv_fetch_object($rs);
}
function mssql_close($con) {
return sqlsrv_close($con);
}
function mssql_num_rows($rs) {
return sqlsrv_num_rows($rs);
}
function mssql_rows_affected($rs) {
return sqlsrv_rows_affected($rs);
}
function mssql_num_fields($rs) {
return sqlsrv_num_fields($rs);
}
function mssql_next_result($rs) {
return sqlsrv_next_result($rs);
}
function mssql_field_name($rs, $index) {
$aryfieldMetadata = sqlsrv_field_metadata($rs);
$fieldMetadata = $aryfieldMetadata[$index];
return $fieldMetadata["Name"];
}
function mssql_fetch_field($rs, $index) {
$aryfieldMetadata = sqlsrv_field_metadata($rs);
$fieldMetadata = $aryfieldMetadata[$index];
return _ArrayToObject($fieldMetadata);
}
function mssql_get_last_message() {
if( ($errors = sqlsrv_errors()) != null) {
/*
foreach($errors as $error) {
echo "SQLSTATE: " . $error["SQLSTATE"];
echo "<br>";
echo "code: " . $error["code"];
echo "<br>";
echo "message: " . $error["message"];
echo "<br>";
echo "<br>";
}
*/
$msg = "=== SQL-ERROR ===";
$msg .= "<br>";
$msg .= "SQLSTATE: " . $errors[0]["SQLSTATE"];
$msg .= "<br>";
$msg .= "Code: " . $errors[0]["code"];
$msg .= "<br>";
$msg .= "Message: " . $errors[0]["message"];
$msg .= "<br>";
$msg .= "<br>";
return $msg;
}
}
function _ArrayToObject($array) {
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name=>$value) {
$name = strtolower(trim($name));
if (!empty($name)) {
$object->$name = $value;
}
}
}
if (empty($array)) {return $array;}
return $object;
}
function _ObjectToArray($object) {
$array = array();
if (is_object($object)) {
$array = get_object_vars($object);
}
return $array;
}
}
?>