数字数据是否不需要mysql\u real\u escape\u string()?PHP
我有一个将MySQL表ID作为输入的函数 我可以使用is\u numeric而不是mysql\u real\u escape\u字符串吗 像这样:数字数据是否不需要mysql\u real\u escape\u string()?PHP,php,mysql,security,escaping,Php,Mysql,Security,Escaping,我有一个将MySQL表ID作为输入的函数 我可以使用is\u numeric而不是mysql\u real\u escape\u字符串吗 像这样: protected function validId($id) { if(!is_numeric($id)) return false; // else do stuff } 编辑: 我还想提一下,我有时会用到: $val=(int)$val 以下是PHP文档中关于类型转换的部分: 另外,我相信mysql\u real\u esc
protected function validId($id) {
if(!is_numeric($id)) return false;
// else do stuff
}
编辑:
我还想提一下,我有时会用到:
$val=(int)$val
以下是PHP文档中关于类型转换的部分:
另外,我相信mysql\u real\u escape\u字符串需要每次使用时对数据库进行点击。为什么在验证整数时会这样做
编辑2:
另外,is_int()不适用于表单输入,这就是我使用is_numeric的原因。但是,这样做可能会解决问题并加快工作速度/减少服务器负载:
protected function validId($id) {
if(!is_numeric($id)) return false; // confirm it is number or numeric string
$id = (int) $id; // cast to int (will chop off decimals I believe)
// do stuff
}
视情况而定
是数字的
允许十六进制表示法。如果在查询中用引号将其括起来,则只会导致0
,但如果不这样做,则会正确解释是数字的
也允许使用科学记数法,这也会遇到同样的问题
就个人而言,我建议使用intval()
,但是mysql\u real\u escape\u string
更安全
如果是函数名的长度,只需执行此操作,然后忘记它:
function esc($str) {return mysql_real_escape_string($str);}
作为补充说明,我建议不要使用mysql函数库,因为它已被弃用。使用MySQLi扩展,或者更好的使用PDO库。@spryno724是的,我知道。我需要完成我开始的工作,然后回去用PDO替换一切。我能理解|-(我自己也有这样的项目。尽管你可能想知道。不要使用不推荐的函数来完成你已经开始的工作。当你编写新代码时,请使用PDO或MySQLi。这样,当项目完成时,你可以少重写代码,并帮助你更快地学习新的方法。实际上,没有一个conv使用不推荐使用的函数编写新代码的原因。请参阅我的编辑:我还想知道如何使用(int)将值转换为整数。这与
intval
基本相同。谢谢。我不知道mysql\u real\u escape\u string如何比inval()/(int)更安全尽管如此。一个整数怎么可能是不安全的?没有什么可以逃逸的?我怀疑PHP会有一个bug,它会影响像类型转换这样基本的东西,允许通过int值进行SQL注入。@ButtleButkus:为什么不调用逃逸函数呢?它不会伤害任何东西(从性能上讲,这比解析运行它的PHP脚本要快得多…@BillyONeal为什么不呢?因为mysql_real_escape_string()每次调用时都会命中一个db。PHP必须询问mysql如何对每个字符串进行转义。当转换为int时,PHP中没有解析。只需要int,int是安全的。(如果PHP不是一种松散类型的语言,这不会是一个问题)在这种情况下,我仍然不相信我应该使用mysql\u real\u escape\u string()。这看起来仍然是一种浪费。