【发布时间】:2014-04-27 19:46:15
【问题描述】:
我正在尝试学习如何使用 PDO,这样我的表单就不会被 SQL 注入。 我对如何为我的插入代码编写执行函数感到困惑。
这是我的代码:
$db = new PDO('mysql:host=x;dbname=x;charset=utf8', 'x', 'x');
if ( !$db )
{
die('Could not connect: ' . mysql_error());
}
$ipaddress = $_SERVER['REMOTE_ADDR'];
$mail = $_POST['mail'];
$stmt = $db->prepare("SELECT * FROM ucm_signup WHERE email =? ") or exit(mysql_error());
$stmt->bindValue(1, $mail, PDO::PARAM_STR);
$stmt->execute();
$num_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
if($num_rows == 0)
{
//if there are no duplicates...insert
$sql = $db->prepare("INSERT INTO ucm_signup company, address1, address2, city, province, zip, fname, lname, email, phone, session, iama, buyfrom, group1, ipaddress )
VALUES ( '$_POST[company]','$_POST[address1]','$_POST[address2]','$_POST[city]', '$_POST[province]','$_POST[zip]','$_POST[fname]','$_POST[lname]','$_POST[mail]', '$_POST[phone]','$_POST[session]','$_POST[iama]','$_POST[buyfrom]','$_POST[group1]', '$ipaddress')");
$sql->execute(array(':company' => I AM LOST))
}
我什至关闭 INSERT 吗?谢谢
【问题讨论】:
-
不,你不是。为什么不使用与 SELECT 相同的 prepared statement 原则?
-
将您的
$_POST[fields]放入execute(array(...)),将它们与:placeholder 名称相关联,您将其放入INSERT 语句中以代替引用的文字变量。 -
如果您想学习 PDO,请阅读教程并关注它们至
T。Here, read this -
VALUES(:foo)然后execute(array(":foo" => "bar"))在你的情况下bar是$_POST['bar'].. -
$field1将在两行之间读取。您需要以$field1=$_POST['company'];为例。你不会为你的价值观做那种插入。 @DDDD