我一直在研究将数据插入数据库表的不同方法,我不确定哪一种是正确的/最好/最安全的方式。
我有一个表单输入,用户可以在其中输入一些数据。我有变量:
$name = "Steve";
,$password = "abc123";
,$ip = "1.1.1.1";
和$admin = 0;
我目前将此数据插入表中的方式如下:
$q = "INSERT INTO users (username, password, ip, admin) VALUES ('$name', '$password', '$ip', '$admin')";
$query = $db->prepare($q);
$result = $query->execute();
你会做出哪些改进?为什么?我已经看到一些放置:name
而不是$name
。但是,当我这样做时,它实际上插入了":name"进入数据库,而不是该人的实际名称。
答案 0 :(得分:1)
您可以使用下面列出的代码:
$stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:field5)");
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5));
答案 1 :(得分:1)
我不认为这仍然是对的。您确实想使用:name
方法。它插入字面意思的原因是因为你错过了执行中的某些东西,这个数组告诉它什么值绑定到什么参数。
应该是:
$q = "INSERT INTO users (username, password, ip, admin) VALUES (:name, :password, :ip, :admin)";
$query = $db->prepare($q);
$result = $query->execute(array(":name" => $name, ":password" => $password, ":ip" => $ip, ":admin" => $admin));
至于原因:它将让他们处理参数的正确绑定和消毒,无论其类型如何。