2016-07-20 28 views
1

Ich habe Probleme mit einer langsame Abfrage, die mehr als 30 Sekunden zur Ausführung benötigt, möchte ich daher meine sqlsrv_query Timeout erhöhen.Ändern von QueryTimeout von sqlsrv_query

Fatal error: Maximum execution time of 30 seconds exceeded 

Ich habe Probleme mit meiner PHP-Syntax, wie die Beispiele an: http://php.net/manual/en/function.sqlsrv-query.php nicht wirklich Sinn für mich haben.

Derzeit meine Verbindung/Setup sieht wie folgt aus:

$testServer = 'IP\servername,PORT'; 
$testDetails = array('Database' => 'DBNAME', 'UID' => 'USERNAME', 'PWD' => 'Password'); 
$testConnect = sqlsrv_connect($testServer, $testDetails); 

Mein Verständnis ist, dass ich die timout Details durch als Parameter innerhalb sqlsrv_connect übergeben müssen, aber ich bin nicht meine Syntax richtig hinzubekommen.

(ich habe die Abfrage so viel optimiert, wie ich kann leider das Design der db-Tabelle I nicht in der Lage bin, um es konsequent in weniger als 30 Sekunden zurück.)

Antwort

4

Dieser Fehler ist eigentlich ein PHP-Fehler und hat nichts mit den sqlsrv-Treibern zu tun; Standardmäßig führen die sqlsrv-Treiber eine Abfrage aus, bis sie ein Ergebnis erhalten.

Key: Querytimeout
Wert: Eine positive Zahl
Beschreibung: Einstellung des Abfrage-Timeout in Sekunden. Standardmäßig wartet der Treiber unbegrenzt auf Ergebnisse.
(Hervorhebung von mir)

Quelle: Options parameter - sqlsrv_query (php.net)


Der Fehler ist die max_execution_time in der php.ini-Datei definiert - default 30 Sekunden. Wenn das Skript über 30 Sekunden ausgeführt wird, beendet der Parser das Skript und löst den schwerwiegenden Fehler aus.

Um diesen Fehler zu beheben, können Sie entweder die max_execution_time Einstellung ändern in der Datei php.ini, oder alternativ an der Spitze des Skripts hinzu:

ini_set("max_execution_time", value); //The value will only be changed for this script! 

Wo value ist die maximale Zeit in Sekunden Sie möchte, dass das Skript ausgeführt wird.


Wie Sie Ihre Frage fragt ein Timeout für Abfragen Einstellung, die Syntax für das wäre:

$result = sqlsrv_query($conn, $query, $params, array("QueryTimeout" => 30)); 

Wo wiederum 30 ist die maximale Zeit in Sekunden an, die Abfrage ausgeführt werden soll zum.

+0

Vielen Dank für die umfassende Antwort! (einschließlich des Syntax-Bits sqlsrv_query) Ich habe meine php.ini geändert und mein Problem wurde gelöst. – BernardV

+0

Das "array (" QueryTimeout "=> 30)" löste ein ähnliches Problem für mich. Vielen Dank. – luisdev

+0

Hinzufügen von set_time_limit (300); zu dem PHP-Code, der eine teure Datenbankabfrage ausführte, war ein Workaround, der ein anderes ähnliches Timeout-Problem behob, das ich in einem PHP-Skript auf einem langsamen, alten und mürrischen Server hatte. – luisdev