如何消除准备好的陈述中插入的逃逸

时间:2016-04-16 19:00:50

标签: php mysqli sql-injection

我的应用程序目前将if (get_magic_quotes_gpc()) { stripslashes }后跟mysqli_real_escape_string()应用于所有字符串,使用过滤器确认电子邮件和URL格式,并在查询中使用它们之前确认所有整数和图像数据类型。

我已经掌握了使用参数应用预准备语句的基础知识,例如,

$query = "INSERT INTO my_table (col1, col2, modified) VALUES (?,?, CURRENT_TIMESTAMP)";
$stmt = mysqli_prepare($connect, $query);
mysqli_stmt_bind_param($stmt, "ss", $string1, $string2);

if (!mysqli_stmt_execute($stmt)) {display error}
else {do something else}

当字符串有撇号(单引号)时,如O'Grady中所示,当插入时,它会以O\'Grady的反斜杠进行转义。每次用户更新帐户时,转义斜线都会呈指数级增长。 INSERT和UPDATE有没有办法避免这种情况;如果不是如何在SELECT上消除它,那么它在检索(和乘法)时不会显示?

0 个答案:

没有答案