2012-06-21 21 views
14

Tôi muốn thoát khỏi chuỗi trong Magento, nhưng khi tôi đang sử dụng mysql_real_escape_string, tôi nhận được cảnh báo.Làm thế nào để thoát mysql trong Magento?

Cảnh báo: mysql_real_escape_string() [function.mysql-thực-escape-string]: Không thể kết nối với MySQL địa phương máy chủ thông qua ổ cắm '/var/lib/mysql/mysql.soc .... . '

Tôi không thể tìm thấy bất kỳ chức năng thoát lõi mysql nào của magento. Vì vậy, tôi nên làm gì?

+0

Có, và vẫn googling để tìm câu trả lời. – user1463076

+0

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

Trả lời

24

Sử dụng này để thoát khỏi một chuỗi cho một truy vấn và thêm dấu nháy đơn xung quanh:

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

Bạn có thể tra cứu Varien_Db_Adapter_Pdo_Mysql để biết chi tiết hơn nữa trích dẫn nếu cần thiết.

+0

Cảm ơn, chức năng này thoát chuỗi tốt. Nó cũng thêm dấu ngoặc kép ở đầu và cuối chuỗi. Tôi hy vọng nó sẽ hoạt động ngay bây giờ. – user1463076

+1

Bạn có thể vui lòng đánh dấu câu hỏi là đã trả lời không? – Vinai

+1

trích dẫn này đã thêm dấu ngoặc kép vào đầu và cuối chuỗi. Sau đó, tôi thử nghiệm Magento mà không có bất kỳ chức năng thoát và không cần phải thoát khỏi chuỗi. Tôi nghĩ rằng Magento có chức năng thoát mặc định. mã của tôi '($ tbl_customer = getMazeTable ("customer_entity"); \t \t \t \t \t \t $ connection = Mage :: getSingleton ('lõi/tài nguyên') \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 -> từ ($ tbl_customer) \t \t \t \t \t \t \t -> nơi ('email =?', $ Email);) ' – user1463076

7

Tôi nghĩ rằng Magento sử dụng một lớp DB Access dựa trên PDO, xử lý thoát tự động với điều kiện bạn sử dụng các tham số ràng buộc. Ví dụ từ 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

đây là một ví dụ hoàn hảo về lý do tại sao trả lời bằng một liên kết không phải là một ý tưởng hay: liên kết bị hỏng. – OSdave

+0

Đã sửa lỗi, vui lòng xóa ghi chú. – siliconrockstar

+1

cảm ơn bạn đã sửa chữa nó, tôi đã xóa bỏ phiếu giảm giá – OSdave

Các vấn đề liên quan