2013-01-04 16 views

Trả lời

6

Thật không may, phương pháp quoteInto() đã bị xóa với phần giới thiệu Zend\Db mới trong ZF 2.0. Và không có tương đương mà có chính xác cùng một hành vi.

Trong ZF2, có phương thức quoteValue(). Phương thức này lấy một giá trị làm tham số và sau đó trích dẫn giá trị để bạn có thể đặt giá trị đó vào truy vấn SQL dưới dạng giá trị một cách an toàn.

Tuy nhiên, bạn có thể sử dụng quoteValue() để nhân rộng hành vi của phương pháp ZF1 quoteInto(). Bạn chỉ có thể lấy mã của phương pháp quoteInto() từ ZF1, và áp dụng các phương pháp quoteValue() từ đối tượng nền tảng trong ZF2 với nó:

// modified quoteInto() function for ZF2 
function quoteInto($text, $value, $platform, $count = null) 
{ 
    if ($count === null) { 
     return str_replace('?', $platform->quoteValue($value), $text); 
    } else { 
     while ($count > 0) { 
      if (strpos($text, '?') !== false) { 
       $text = substr_replace($text, $platform->quoteValue($value), strpos($text, '?'), 1); 
      } 
      --$count; 
     } 
     return $text; 
    } 
} 

Có một số khác biệt. ZF1 có thông số $type, nhưng vì cách ZF2 hoạt động với những thứ này, tham số kiểu không có ý nghĩa nhiều. Và có tham số $platform vì phương pháp này có sự phụ thuộc trên nền tảng cho phương thức quoteValue().

-1

vẫn còn đó (kinda), hãy kiểm tra zf2/library/Zend/Db/Adapter/Platform /your DB adapter Tôi tìm thấy khoảng 6 phương thức quote() khác nhau có sẵn trong MySql variant. Tuy nhiên, tôi nghĩ rằng quoteValue() đã thay thế mặc định quoteInto() tất cả chúng ta đều đã quen.

[EDIT]
Using the platform object sẽ cung cấp một số hướng nhưng tôi nghĩ rằng hầu hết các thời điểm SQL lớp mới sẽ chỉ cần sử dụng api nền tảng để thực hiện trích dẫn cho chúng ta. Tôi vẫn tự mình biết điều này vì vậy tôi không thực sự chắc chắn về bất cứ điều gì.

+0

'quoteInto' nhận hai tham số: chuỗi và giá trị được thay thế nhưng' quoteValue' chỉ nhận 1 tham số. Tôi nên sử dụng nó như thế nào? –

3

Trích dẫn câu lệnh SQL là cách cũ và có khả năng không an toàn để thực hiện. Bạn nên sử dụng các câu lệnh đã được chuẩn bị để có sự bảo vệ tốt hơn nhiều so với việc tiêm SQL. Tôi sẽ sử dụng một trong các trình điều khiển PDO listed here (tùy thuộc vào cơ sở dữ liệu của bạn) và làm theo một số ví dụ bên dưới sử dụng các truy vấn đã chuẩn bị.

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