Có thể cho tôi biết nếu có chức năng hoạt động giống như mysql_real_escape_string()
của PHP cho Perl từ mô-đun DBI?Có tương đương với mysql_real_escape_string() của PHP cho DBI của Perl không?
Trả lời
Bạn nên sử dụng placeholders and bind values.
Từ http://www.stonehenge.com/merlyn/UnixReview/col58.html:
use SQL::Abstract; ... my $sqa = SQL::Abstract->new; my ($owner, $account_type) = @_; # from inputs my ($sql, @bind) = $sqa->select('account_data', # table [qw(account_id balance)], # fields { account_owner => $owner, account_type => $account_type }, # "where" ); my $sth = $dbh->prepare_cached($sql); # reuse SQL if we can $sth->execute(@bind); # execute it for this query
Đó là bài viết Randal Schwartz của "Tránh tấn công SQL Injection". Tốt đẹp. –
Giống như quote?
Tôi cũng khuyên bạn nên đọc tài liệu cho DBD::MySQL nếu bạn lo lắng về utf8.
Không. Bỏ trốn. SQL.
Không. Trích dẫn. SQL.
Sử dụng trình giữ chỗ/tham số SQL (?
). Cấu trúc của câu lệnh SQL và các giá trị dữ liệu được trình bày bởi các trình giữ chỗ được gửi đến cơ sở dữ liệu hoàn toàn riêng biệt, do đó (chặn một lỗi trong cơ sở dữ liệu hoặc mô-đun DBD) hoàn toàn không có cách nào các giá trị dữ liệu có thể được hiểu là SQL lệnh.
my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name); # Finds Little Bobby Tables without harming the db
Là một lợi ích phụ, sử dụng trình giữ chỗ cũng hiệu quả hơn nếu bạn sử dụng lại câu lệnh SQL (chỉ cần chuẩn bị một lần) và không kém hiệu quả nếu bạn không (nếu bạn không gọi chuẩn bị một cách rõ ràng, nó vẫn được gọi ngầm trước khi truy vấn được thực hiện).
Cơ sở dữ liệu Xử lý Phương pháp "quote"
my $dbh = DBI->connect(...);
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
$dbh->quote("Don't");
- 1. Python tương đương với DBI của Perl là gì?
- 2. Perl tương đương với preg_callback của PHP
- 3. Perl tương đương với escapeshellarg của PHP
- 4. Perl tương đương với get_file_contents của PHP()?
- 5. Có tương đương C# với mảng array_key_exists của PHP không?
- 6. PHP có tương đương với #ifdef của C/C++ không?
- 7. Có Ruby tương đương với trích xuất của PHP không?
- 8. Có tương đương Perl của dự án koan ruby không?
- 9. Có điều gì tương đương với Sonar cho Perl không?
- 10. Python tương đương với memory_get_usage() của PHP?
- 11. Javascript tương đương với urldecode của php()
- 12. Javascript tương đương với strtotime của php()?
- 13. Java tương đương với preg_replace_callback của PHP
- 14. Ruby tương đương với $ của PHP $
- 15. Đi tương đương với 'implode' của PHP
- 16. Tương đương cấu trúc trong PHP với `__END__` của Ruby hoặc '__DATA__` của Perl'
- 17. Tương đương của Python là "perl -V"
- 18. Có tương đương với idifierForVendor của iOS cho Android không?
- 19. Có tương đương với Ruby cho Function.prototype.bind của JavaScript không?
- 20. Có một Coldfusion tương đương với PHP cho include_once không?
- 21. Tương đương irb của Ruby trong Perl?
- 22. ASP.Net tương đương với file_get_contents của PHP ('php: // input');
- 23. Perl tương đương với 'từ chối' của Ruby?
- 24. ArrayObject của PHP có tương đương in_array không?
- 25. Perl tương đương với Php foreach vòng lặp
- 26. php có tương đương với virtualenv của python hay sandy của ruby không?
- 27. Có tương đương C cho mô-đun Cá chép của Perl không?
- 28. Tương lai của Class :: DBI là gì?
- 29. Có tương đương .NET của LWP của Perl/WWW :: Cơ chế hóa không?
- 30. Perl DBI thay thế cho LongReadLen
'DBH-> bind()' là tương đương trực tiếp, nhưng giống như Sinan nói, đừng làm vậy. Làm điều đó đúng với các phần giữ chỗ và các giá trị liên kết. – mpeters