2012-06-21 12 views
14

Ich möchte String in Magento zu entkommen, aber wenn ich mysql_real_escape_string verwende, bekomme ich eine Warnung.Wie mysql in Magento entkommen?

Warnung: mysql_real_escape_string() [function.mysql-real-Escape-string]: Kann nicht an lokalen MySQL Server über Socket ‚/var/lib/mysql/mysql.soc verbinden .... . '

Ich konnte keine Magento Core mysql Escape-Funktion finden. Also was soll ich tun?

+0

Ja, und immer noch googeln, um die Antwort zu finden. – user1463076

+0

versuchen: http://forums.cpanel.net/f354/cant-connect-local-mysql-server-through-socket-var-lib-mysql-mysql-sock-111-a-78444.html und: http : //stackoverflow.com/questions/5376427/cant-connect-to-local-mysql-server-through-socket-var-mysql-mysql-sock-38 – alfasin

Antwort

24

verwendet eine Zeichenfolge für eine Abfrage zu entkommen und die umliegenden Apostrophe hinzufügen:

Mage::getSingleton('core/resource')->getConnection('default_write')->quote($string); 

Sie Varien_Db_Adapter_Pdo_Mysql für weitere Details zu zitieren nachschlagen können, wenn nötig.

+0

Danke, diese Funktion entkommt Zeichenfolge gut. Es fügt auch Anführungszeichen am Anfang und Ende der Zeichenfolge hinzu. Ich hoffe, es wird jetzt funktionieren. – user1463076

+1

Könnten Sie bitte die Frage auch als beantwortet markieren? – Vinai

+1

Dieses Zitat fügte Anführungszeichen am Anfang und am Ende des Strings hinzu. Dann habe ich Magento ohne Entweichungsfunktion getestet und es besteht keine Notwendigkeit, den String zu verlassen. Ich denke, Magento hat Standard-Escaping-Funktion. mein Code '($ tbl_customer = getMazeTable ("customer_entity"); \t \t \t \t \t \t $ connection = Mage :: getSingleton ('core/Ressource') \t \t \t \t \t \t \t -> getConnection ('core_read'); \t \t \t \t \t \t $ select = $ connection-> select() \t \t \t \t \t \t \t -> aus ($ tbl_customer) \t \t \t \t \t \t \t -> where ('email =?', $ E-Mail);) ' – user1463076

7

Ich denke, Magento verwendet eine DB-Access-Schicht auf PDO-Basis, die das automatische Entkommen behandelt, vorausgesetzt, Sie verwenden gebundene Parameter. Beispiel von Using Magento Methods to write Insert Queries with care for SQL Injection

$write = Mage::getSingleton("core/resource")->getConnection("core_write"); 

// Concatenated with . for readability 
$query = "insert into mage_example " 
     . "(name, email, company, description, status, date) values " 
     . "(:name, :email, :company, :desc, 0, NOW())"; 

$binds = array(
    'name' => "name' or 1=1", 
    'email' => "email", 
    'company' => "company", 
    'desc' => "desc", 
); 
$write->query($query, $binds); 
+1

Dies ist ein perfektes Beispiel dafür, warum das Antworten mit einem Link keine gute Idee ist: Der Link ist nicht erreichbar. – OSdave

+0

Behoben, entferne bitte den Downvote. – siliconrockstar

+1

danke für die Korrektur, ich entfernte den Downvote – OSdave