快一点.
我正在将使用mysql的旧Web应用程序迁移到MysqLi.我曾经使用我编写的自定义卫生功能防止sql注入:
function sani($text=""){
if (!is_array($text)) {
$text = str_replace("<", "<", $text);
$text = str_replace(">", ">", $text);
$text = str_replace("\"", """, $text);
$text = str_replace("'", "'", $text);
return $text;
}
}
我以前使用它的方式:
MysqL_query("SELECT * FROM `table` WHERE `username` = '" . $sani($userinput) . "'");
基本上它所做的就是更改可用于注入html编码的符号.到目前为止它一直运行良好,但由于我正在迁移到MysqLi,我想知道准备好的语句是否比这个函数更安全.
另外,我已经阅读了很多关于准备和未准备的陈述之间的速度差异,它是否真的那么明显?我每秒做一百个查询,所以我怀疑我会受到很大的影响吗?
谢谢!
解决方法:
是的,准备好的语句肯定比这个功能更安全,而且它们还有一个额外的好处,就是当你从数据库中取回数据时不必解码数据.顺便说一句,即使对于旧的MysqL库,你真的应该依赖MysqL_real_escape_string而不是你自定义的卫生功能:)
准备好的语句可以比未准备好的语句快得多,并且在典型的使用情况下,即使您“只是”执行100次查询/秒,您也将从中受益.