MySQL_REAL_ESCAPE_STRING wurde nicht mehr funktioniert, als ich meinen Code auf einen anderen Server verschoben habe
-
26-10-2019 - |
Frage
Der folgende Code funktioniert in meiner lokalen XAMPP -Installation (Windows 7) vollkommen in Ordnung, aber als ich ihn auf einen Win2K8 R2 -Server portierte, funktioniert das Stück MySQL_REAL_ESCAPE_STRING nicht. Wenn ich es kommentiere, funktioniert es gut. Ich bin mir ziemlich sicher, dass dies etwas mit der Php.ini -Datei zu tun hat, kann aber nicht genau bestimmen, was es ist. Vielleicht hätte mein Code zunächst anders geschrieben werden sollen.
function add_asset($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $asset_value, $purchase_date) {
global $db;
$asset_desc = mysql_real_escape_string($asset_desc);
$query = "INSERT INTO assets
(asset_ID, asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date)
VALUES
(DEFAULT, '$asset_type_ID', '$org_ID', '$asset_desc', '$asset_cost', '$asset_value', '$purchase_date')";
$add_asset = $db->exec($query);
$last_asset_ID = $db->lastInsertId();
return $last_asset_ID;
Insbesondere, wenn der Datensatz in MySQL eingegeben wird, die asset_desc
Feld ist leer.
Vielen Dank!
UPDATE: Nachdem ich das PHP -Fehlerprotokoll durchgesehen hatte, fand ich Folgendes:
[Funktion.Mysql-Real-Escape-String]: Zugriff für den Benutzer '' '@' localhost '(mit Passwort: nein)
Lösung
Sieht so aus, als würden alle Anmeldeinformationen, die Sie verwenden, um eine Verbindung zur Datenbank in Ihrem Entwicklersystem herzustellen, auf Ihrem Server fehlschlagen.
mysql_real_escape_string()
Benötigt eine aktive MySQL -Verbindung, damit sie richtig funktioniert. Wenn Sie nicht mit der Datenbank verbunden sind, wird sie fehlschlagen.
Überprüfen Sie wo immer in Ihrem Code, den Sie anrufen
mysql_connect()
; Aus der Fehlermeldung scheint sich Ihr Entwicklersystem auf die zu verlassen Laufzeit -Standardwerte für die MySQL -Erweiterung.Alternativ ist die Verbindungsressource möglicherweise nicht zugänglich
mysql_real_escape_string()
Auf dem Serversystem. Aus die Dokumentation fürmysql_real_escape_string()
(Hervorhebung meiner):link_identifier
Die MySQL -Verbindung. Wenn die Link -Kennung nicht angegeben ist, wurde der letzte Link von geöffnet von geöffnet
mysql_connect()
wird angenommen. Wenn kein solcher Link gefunden wird, wird versucht, eines zu erstellen, als obmysql_connect()
wurde ohne Argumente gerufen. Wenn keine Verbindung gefunden oder festgelegt wird, wird ein E_WARNING -NEHL -Fehler generiert.Möglicherweise ist es möglich, dass Ihr Dev -Server so konfiguriert ist, dass Anrufe aufgerufen werden
mysql_connect()
Ohne Argumente stellt eine Verbindung zum MySQL -Datenbankserver her. Die wahrscheinlichsten Gründe dafür sind, dass entweder Dev MySQL Server anonyme Verbindungen ermöglicht, oder php.ini gibt gültige Standardanmeldeinformationen an.Dies schlägt jedoch bei der Produktion fehl, höchstwahrscheinlich, weil der ProduktionsmySQL -Server keine anonymen Verbindungen zulässt und in PHP.ini keine Standardanmeldeinformationen angegeben sind.
Überprüfen Sie Ihren Code auf Situationen, in denen es möglich ist, den Anruf zu erreichen
mysql_real_escape_string()
ohnemysql_connect()
Zuerst aufgerufen werden (beachten Sie, dass eine Verbindung mit Pdo zählt in diesem Fall nicht).Da Sie PDO verwenden, sollten Sie auf den Umgang aufstellen Vorbereitete Aussagen, was die Notwendigkeit beseitigt
mysql_real_escape_string()
völlig.
Andere Tipps
Sie denken wahrscheinlich an "magische Zitate"
Diese Funktion wurde in PHP 5.3 veraltethttp://php.net/manual/en/function.mysql-escape-string.php
Sie müssen Ihren Code neu schreiben, PDO von nun an idealerweise verwenden und vorbereitete Aussagen verwenden.
Schnelle Antwort:
Stellen Sie zuerst eine Verbindung zur Datenbank her
Verwenden Sie dann die MySQL_REAL_ESCAPE_STRING.
Nicht umgekehrt......