我在一家仍在使用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);
答案 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
。