intval&的用法清理整数时的real_escape_string

时间:2011-11-21 01:42:49

标签: php mysql mysqli

亲爱的所有人。

我在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));

谢谢。

3 个答案:

答案 0 :(得分:9)

intvalreal_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 ()只应在您确实要在查询中使用字符串值的地方使用。对于其他一切,请使用更合适的工具。