Phi*_*son 8 perl mysql-real-escape-string dbi
有些人可以告诉我,如果有一个函数mysql_real_escape_string()
与DBI模块中的Perl的PHP相同吗?
别.逃逸.SQL.
别.引用.SQL.
使用SQL占位符/参数(?
).SQL语句的结构和占位符表示的数据值完全分开发送到数据库,因此(除了数据库引擎或DBD模块中的错误),绝对没有办法将数据值解释为SQL命令.
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
Run Code Online (Sandbox Code Playgroud)
作为附带的好处,如果你重新使用你的SQL语句(它只需要准备一次),使用占位符也会更有效,如果你不这样做,那么使用占位符效率也会更高(如果你没有明确地调用prepare,它仍然会得到在执行查询之前隐式调用).