我是否需要在Mysql中转义INT类型值?

时间:2015-07-27 20:14:21

标签: php mysql mysqli

我在一家仍在使用mysqli连接的公司工作。我知道PDO更好,我们应该使用它,但改变到那将需要我们没有时间的大量工作。我们的目标是将来的公司网站切换到Laravel。

我知道mysqli类也有一个prepare函数,但它并不适合我们用mysqli编写的类。

在那之前,mysql是否会将$ _POST字符串变量转换为INT或DECIMAL类型,或者我是否需要对sql字符串中的所有变量使用real_escape_string,无论它是否保存到字符串或INT列。 / p>

Addon问题:real_escape_string是否会保护我免受注射?

示例代码:

$sql = "
    INSERT INTO table
    (
         column
    )
    VALUE
    (
         " . $mysqli_connection->real_escape_string($_POST['number']) . "
    )";
$mysqli_connection->query($sql);

3 个答案:

答案 0 :(得分:1)

在使用mysql语法之前,可以对整数数据使用intval()PHP函数:

$id = intval($id);

任何非编号的帖子至少会产生一个数字或零。

答案 1 :(得分:0)

我会逃避或参数化通过$ _POST来的任何东西,因为你永远无法保证来自客户端的有效值。更好的是,验证它并转义/参数化。

答案 2 :(得分:0)

不,它不会。考虑提交:

1=2

那里没有sql元字符,所以它不会被escape函数修改为 AT ALL 。所以你最终得到了

... VALUES (1 = 2)

将以

执行
... VALUES (false)

并最终在表格中插入整数0