我在mysql数据库的某些表中使用整数PK。在从PHP脚本输入之前,我正在进行一些清理,包括intval($ id)和$ mysqli-> real_escape_string()。
查询非常简单
insert into `tblproducts`(`supplier_id`,`description`) values('$supplier_id','$description')
在这个例子中,$ description通过real_escape_string(),而$ supplier_id只是intval()'ed。
我只是好奇,如果有任何情况,当我需要将intval和real_escape_string同时应用于整数我插入数据库?所以基本上我真的需要使用吗?
$supplier_id = intval($mysqli->real_escape_string($supplier_id));
谢谢。
答案 0 :(得分:9)
intval
比real_escape_string
更快,因为real_escape_string
必须连接到数据库并根据字符集/排序规则进行转义。
您也可以像以下一样转换int:
$val = (int)$val;
因此无需双重消毒
答案 1 :(得分:1)
在对变量运行intval之后,您不必使用$ mysqli-> real_escape_string。如果intval()不是整数,则返回0,如果是整数则返回值。
Example:
$variable = '5';
$variable2 = 'c5b';
if(intval($variable)) echo 'It is a variable'; # intval will return 5 or true
if(intval($variable2)) echo 'It is a variable'; # intval will return 0 or false since it has a letter
在某些情况下,如果将intval设置为'5b',则intval将返回字符串中的第一个整数
答案 2 :(得分:0)
考虑这样的事情:
$x = "50 O'Brien Family Members at a Bar";
使用intval()
会为您提供“转义”值
50
而real_escape_string会给你
50 O\'Brien Family Members at a Bar
real_escape_ STRING ()只应在您确实要在查询中使用字符串值的地方使用。对于其他一切,请使用更合适的工具。