Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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-防止INSERT语句上的SQL注入_Php_Sql_Insert - Fatal编程技术网

PHP-防止INSERT语句上的SQL注入

PHP-防止INSERT语句上的SQL注入,php,sql,insert,Php,Sql,Insert,我将保持简短,我正在尝试将一些代码应用到我的insert查询中,以防止SQL注入。请参阅下面的代码: $insertquery = mysql_query("INSERT INTO users (firstname, lastname, email, username, password) VALUES ('".mysql_real_escape_string($fname)."', '".mysql_real_escape_string($lname)."', '".mysql_real_es

我将保持简短,我正在尝试将一些代码应用到我的insert查询中,以防止SQL注入。请参阅下面的代码:

$insertquery = mysql_query("INSERT INTO users (firstname, lastname, email, username, password) VALUES ('".mysql_real_escape_string($fname)."', '".mysql_real_escape_string($lname)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($username)."', .'".mysql_real_escape_string($pass)."')");
            header("location:index-login-page.php?msg1=Thank you for choosing SIAA, please login.");
上面的代码没有插入任何数据,但仍然打印msg1消息。我做错了什么,或者是否有可能阻止insert语句上的SQL注入

多谢各位


Sohail.

使用PDO和准备好的查询。使用准备好的语句和参数化查询。这些SQL语句与任何参数分开发送到数据库服务器并由数据库服务器解析。通过这种方式,攻击者不可能注入恶意SQL

($conn is a PDO object)

$conn = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare("INSERT INTO users VALUES(:firstname, :lastname)");
$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->execute();

使用PDO和准备好的查询。使用准备好的语句和参数化查询。这些SQL语句与任何参数分开发送到数据库服务器并由数据库服务器解析。通过这种方式,攻击者不可能注入恶意SQL

($conn is a PDO object)

$conn = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare("INSERT INTO users VALUES(:firstname, :lastname)");
$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->execute();

使用预先准备好的语句,这将在任何情况下解决问题。通过这种方式,用户输入是单独发送的,无法篡改查询


或者

使用预先准备好的语句,这将在任何情况下解决问题。通过这种方式,用户输入是单独发送的,无法篡改查询


或者

在sof中有一个流行的问题。基本调试:在执行查询之前回显查询。显示什么?在sof中有一个流行的问题。基本调试:在执行查询之前回显查询。显示的是什么?嗨,Ninju,你放在哪里($conn是一个PDO对象)-我收到一个错误,说“意外的是”。。这是为什么?我已经编辑了我的答案。使用PDO访问MySQL数据库默认情况下不使用real prepared语句。但是如果我在php文件上写了“include”(“dbconfig.php”)?你需要在dbconfig.php.Ok中设置PDO连接,我现在就试试。Hi Ninju,你放在哪里($conn是一个PDO对象)-我在说意外的“是”时出错。。这是为什么?我已经编辑了我的答案。使用PDO访问MySQL数据库默认情况下不使用real prepared语句。但是如果我在php文件的顶部写了“include”(“dbconfig.php”)?你需要在dbconfig.php.Ok中设置PDO连接,我现在就试试。