2012-01-28 40 views
6

Tôi đang sử dụng key làm tên cột trong bảng MySQL.Cách trích dẫn tên cột bằng Zend_Db?

Từ này được dành riêng, nó cần phải được thoát đúng cách để được sử dụng trong một truy vấn:

… WHERE `key` = 'test' 

thủ này là không có vấn đề, nhưng tôi đang sử dụng Zend Framework và muốn có nó xử lý thoát một cách chính xác, như thế này:

$table = new Application_Model_ATable(); 
$table->fetchRow ($table->select()->where('key = ?','test')); 

Vì vậy, câu hỏi là:

Làm thế nào để trích dẫn/thoát khỏi tên cột với Zend_Db_Table?

+0

hm, thật lạ lùng ... Nó phải có tác dụng ... À, tôi không có thời gian để kiểm tra nguồn ZF, xin lỗi ... PS: như một cách giải quyết bạn có thể làm điều đó một cách thủ công: $ table- > fetchRow ($ table-> select() -> where (''key' =?', 'test')); (thêm dấu cách xung quanh 'khóa' vì SO đánh dấu nó theo cách khác) – zerkms

+0

Tôi đang thực hiện chính xác giải pháp đó vào lúc này, nhưng đang tìm kiếm giải pháp" sạch hơn ":-) Cảm ơn bạn đã cố gắng! :-) – favo

+0

Nếu có câu trả lời hợp lệ - hãy ping tôi với bình luận bắt đầu với tên của tôi, tôi tò mò về cách "đúng" để làm điều đó ;-) – zerkms

Trả lời

4

avoiding MySQL injections with the Zend_Db class

Anh chàng giải thích nó ở đây thực sự nhưng bệnh chỉ cần kéo ra báo giá một cách nhanh chóng ...

Bất kỳ một phần khác của biểu thức đó mà cần phải được trích dẫn hoặc phân là của bạn trách nhiệm. Ví dụ: nếu bạn nội suy bất kỳ biến PHP nào vào biểu thức, sự an toàn là trách nhiệm của bạn. Nếu bạn có các cột tên là từ khóa SQL, bạn cần phải tự phân tách chúng bằng quoteIdentifier(). Ví dụ:

$select->where($db->quoteIdentifier('order').'=?', $myVariable) 

Hy vọng điều này sẽ giúp !!

1

thử một cái gì đó như:

$table = new Application_Model_ATable(); 
$where = $table->getAdapter()->quoteInto('key = ?', 'test'); 
$table->fetchRow ($where); 

* --excerpt từ tài liệu tham khảo Zend_Db_Table - *
Lưu ý Các giá trị và định danh trong biểu thức SQL không được niêm yết cho bạn. Nếu bạn có giá trị hoặc số nhận dạng yêu cầu trích dẫn, bạn phải chịu trách nhiệm cho thực hiện việc này. Sử dụng các phương thức quote(), quoteInto() và quoteIdentifier() của bộ điều hợp cơ sở dữ liệu.

+2

Điều này không thoát khỏi tên cột "chìa khóa", nó vẫn bị ảnh hưởng nhưng bạn cung cấp câu trả lời bằng cách trích dẫn một số tài liệu. Giải pháp là: $ table-> fetchRow ($ table-> select() -> trong đó ($ table-> getAdapter() -> quoteIdentifier ('key'). '=?', 'Test')); - Cảm ơn bạn! – favo

+0

biết tôi đã đóng :) – RockyFord

+0

quoteIdentifier() là chìa khóa để thành công ở đây –

1

Một người phải báo giá tên cột khi chữ hoa được sử dụng. Bạn có thể báo giá những tên đó với $ db-> quoteIdentifier ($ columnName) khi bạn định chuyển đổi bộ điều hợp dữ liệu trong tương lai.

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