4 Stimmen

Keine Verbindung zur msSQL-Datenbank über PHP möglich

Ich verwende den aktuellen Code in Versuch, auf eine msSQL 2005 db zuzugreifen:

<?php
$myServer = "[server]";
$myUser = "[username]";
$myPass = "[password]";
$myDB = "[db]";

//connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die("Couldn't connect to SQL Server on $myServer");

//select a database to work with
$selected = mssql_select_db($myDB, $dbhandle)
  or die("Couldn't open database $myDB");

//declare the SQL statement that will query the database
$query = "SELECT id, name, year ";
$query .= "FROM cars ";
$query .= "WHERE name='BMW'";

//execute the SQL query and return records
$result = mssql_query($query);

$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" . ($numRows == 1 ? "" : "s") . " Returned </h1>";

//display the results
while($row = mssql_fetch_array($result))
{
  echo "<li>" . $row["id"] . $row["name"] . $row["year"] . "</li>";
}
//close the connection
mssql_close($dbhandle);
?>

Sie gibt folgendes zurück:

Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: XXXXXXX in D:\xxxxx.xxx\xxxx.php on line 16
Couldn't connect to SQL Server on XXXXXXX

Worin besteht Ihrer Meinung nach das Problem?

5voto

Es klingt für mich so, als ob eine Ihrer DLLs die falsche Version ist. Bei der Umstellung von SQL2000 auf SQL2005 gab es eine Art Problem, das die Entwickler von PHP nicht selbst gelöst haben. Es gibt eine Reihe von Beiträgen darüber hier: der folgende Link

Ich glaube, die DLL ist ntwdblib.dll und die Version muss mindestens 2000.80.194.0 sein. Wenn Sie Apache oder WampServer verwenden, gibt es eine identische DLL, in der die Apache-DLLs gespeichert sind und die überschrieben werden muss.

Hinweis: Ich hatte dieses Problem vor ein paar Tagen, und als ich die richtigen DLLs fand und beide überschrieb, funktionierte es.

Auch: Möglicherweise müssen Sie Fernverbindungen einrichten. In SQL Server 2005 sind Remote-Verbindungen standardmäßig deaktiviert. Sie können Remote-Verbindungen zulassen, indem Sie das Dienstprogramm SQL Surface Area Configuration ausführen.

4voto

Greg Punkte 306033

Versuchen Sie anzurufen mssql_get_last_message() um die letzte Fehlermeldung zu erhalten:

$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die("Couldn't connect to SQL Server on $myServer. Error: " . mssql_get_last_message());

1voto

oabarca Punkte 10118

Nicht mehr verwenden

mssql_connect

und beginnen mit

sqlsrv_connect

Das wird Ihnen eine Menge Kopfschmerzen ersparen. Außerdem ist die Funktion *mssql_connect* veraltet.

Um sqlsrv_connect zu verwenden, müssen Sie den Treiber herunterladen und als Erweiterung installieren, damit PHP die sqlsrv Funktionen. Laden Sie den Treiber vom Microsoft Download Center herunter (suchen Sie nach "sql server php driver"), zum Zeitpunkt dieses Beitrags war die Download-URL: http://www.microsoft.com/en-us/download/details.aspx?id=20098

Die richtigen Schritte für die Installation werden von Microsoft selbst klar erklärt unter http://www.microsoft.com/en-us/download/details.aspx?id=20098

  1. laden Sie den Treiber herunter. 2. legen Sie ihn in den PHP ext Ordner. 3. aktualisieren Sie die php.ini 4. starten Sie den Server neu.

Nachdem Sie den Sql-Server-Treiber installiert haben, folgen Sie einfach den Anweisungen von http://www.php.net/manual/en/function.sqlsrv-connect.php . Nachfolgend ein kurzer Ausschnitt:

<?php
$serverName = "serverName\sqlexpress"; //serverName\instanceName

// Since UID and PWD are not specified in the $connectionInfo array,
// The connection will be attempted using Windows Authentication.
$connectionInfo = array( "Database"=>"dbName");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
?>

Stimmen Sie ab!

0voto

savageguy Punkte 1495

Ungültige Anmeldedaten. Wenn Sie nicht localhost verwenden, fügen Sie die IP-Adresse des Servers zur sicheren Liste hinzu.

0voto

Templar Punkte 4937

Vor einigen Monaten hatte ich damit einige Schwierigkeiten, und ich fand heraus, dass die einzige Möglichkeit, es zum Funktionieren zu bringen, darin bestand, den Instanznamen bei der Angabe des Servers mit anzugeben. Zum Beispiel:

$myServer = "SERVER\INSTANCENAME";

Die Angabe nur des Servers würde nicht funktionieren, auch nicht bei aktiviertem TCP/IP.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X