Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL注入预防不起作用?_Php_Mysql_Security - Fatal编程技术网

Php MySQL注入预防不起作用?

Php MySQL注入预防不起作用?,php,mysql,security,Php,Mysql,Security,我想用mysql\u real\u escape\u字符串阻止1=1,但不确定我是否做得对,因为我仍然可以执行1=1。这是我的代码: $memberId = mysql_real_escape_string($_GET["memberId"]); $sql = "SELECT firstName, lastName, dateSent, message, messageId FROM member, message WHERE member.memberId = message.sentFrom

我想用mysql\u real\u escape\u字符串阻止1=1,但不确定我是否做得对,因为我仍然可以执行1=1。这是我的代码:

$memberId = mysql_real_escape_string($_GET["memberId"]);
$sql = "SELECT firstName, lastName, dateSent, message, messageId FROM member, message WHERE member.memberId = message.sentFromId AND message.inboxId=" . $memberId . " ORDER BY dateSent DESC;";

感谢mysql\u real\u escape\uStrong>STRING()用于字符串,而不是整数。
1=1
中没有需要转义的内容,因此m_r_e_s()将原封不动地将其传回

如果要处理整数,请使用整数工具:

$memberID = intval($_GET['memberId']);

不进行SQL注入的唯一正确方法是使用。 如果尝试使用转义进行缓解,则将失败。 如果您通常从不连接查询,总是使用预先准备好的语句,那么您就有机会了。
它还具有使代码更具可读性的优点。
而且没有缺点。

+1我同意MK。但是(只是分享一下)我对
准备好的声明的立场是
PDO
,而不是
mysqli
:)Re无缺陷”:如何使用准备好的语句创建多行插入(又称扩展插入)?这不是真的。如果将所有数据视为字符串作为一条规则,则除了LIMIT子句参数外,永远不会失败。而且事先准备好的声明也不是万能的。这对我没有帮助identifiers@Mchl看来你是对的。其他实现(例如JDBC)有批处理语句的概念,但没有PHP,显然。@Col.shrapanel我完全不明白你刚才说的话。我已经在