MySQL_REAL_ESCAPE_STRING wurde nicht mehr funktioniert, als ich meinen Code auf einen anderen Server verschoben habe

StackOverflow https://stackoverflow.com/questions/8808588

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)

War es hilfreich?

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ür mysql_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 ob mysql_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() ohne mysql_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"

http://php.net/manual/en/security.magicquotes.disabling.php

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......

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top