Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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/PDO/MySQL_Php_Mysql_Pdo - Fatal编程技术网

安全表数据项PHP/PDO/MySQL

安全表数据项PHP/PDO/MySQL,php,mysql,pdo,Php,Mysql,Pdo,我正在努力学习PDO的基本原理。我已经构建了以下将数据插入到表中的方法,但我希望得到关于这是否安全或是否可以做得更好的反馈 我的post变量是否需要像使用mysql\u real\u escape\u string()一样进行转义 这是不安全的——您没有采取任何措施阻止从用户提供的$\u POST值注入SQL。您应该使用准备好的语句并将VALE绑定到它们: $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb

我正在努力学习PDO的基本原理。我已经构建了以下将数据插入到表中的方法,但我希望得到关于这是否安全或是否可以做得更好的反馈

我的post变量是否需要像使用
mysql\u real\u escape\u string()
一样进行转义

这是不安全的——您没有采取任何措施阻止从用户提供的$\u POST值注入SQL。您应该使用准备好的语句并将VALE绑定到它们:

$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO `directory`  (`First_Name`,`Surname`,`Nicknames`,`Age`) 
     VALUES (:firstname ,:surname,:nicknames ,:age) ";

 $statement = $conn->prepare($sql);
 $statement->bindValue(":firstname", $firstname);
 $statement->bindValue(":surename", $surename);
 $statement->bindValue(":nicknames", $nicknames);
 $statement->bindValue(":age", $age);

 $count = $statement->execute();

问这类问题最好的地方是。话虽如此,不……不安全。了解如何使用准备好的语句:谢谢@ray,我还需要首先使用我的post值定义$firstname等变量吗$firstname=$_POST['First_Name']$姓氏=$_POST[‘姓氏’]$昵称=$_POST['昵称]$年龄=$_POST[“年龄”]@Liam是的,我假设在创建连接之前,一切都在进行中。此外,这些都在try/catch块中。
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO `directory`  (`First_Name`,`Surname`,`Nicknames`,`Age`) 
     VALUES (:firstname ,:surname,:nicknames ,:age) ";

 $statement = $conn->prepare($sql);
 $statement->bindValue(":firstname", $firstname);
 $statement->bindValue(":surename", $surename);
 $statement->bindValue(":nicknames", $nicknames);
 $statement->bindValue(":age", $age);

 $count = $statement->execute();