所以我开始将我所有的mysql / php工作数据库查询切换到PDO。我想知道以下方法是否可以以某种方式缩短。这个特定的例子是使用大型注册表单并将结果插入数据库。我觉得这是比必要的代码更多的代码......是否有更短的方法将其插入数据库?
$query = $affiliates->prepare('INSERT INTO affiliates (afid, afTitle, afbio, afLink, afEmail, afAddress, afCity, afState, afZip, afphone, affacebook, aflinkedin, aftwitter, afPassword, afLon, afType, aftime, afApproved) VALUES (?, ?, ? , ? , ?, ? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,?, ?)');
echo "prepare successfull";
$query-> execute(array('',$afTitle, $afBio, $afLink, $afEmail, $afAddress, $afCity, $afState, $afZip, $afPhone, $afFacebook, $afLinkedIn, $afTwitter, $afPassword, '', $afType, $date, $afApproved))or die(print_r($affiliates->errorInfo(), true));
echo "Insert worked!";
我为任何糟糕的结构道歉,就像我说的那样,随便学习。这也可以防止sql注入吗?
谢谢!
答案 0 :(得分:1)
一个选项可能是将这些列名和值放入数组中。然后,您可以只使用该数组,而不是多次列出所有变量/列。例如,您可以将代码更改为:
$inserting = array();
foreach(array('afTitle','afbio','afLink','afEmail','afAddress','afCity','afState','afZip','afphone','affacebook','aflinkedin','aftwitter','afPassword','afType','aftime','afApproved') as $i) $inserting[$i] = ${$i};
$sth = $dbh->prepare('INSERT INTO affiliates ('.implode(',', array_keys($inserting)).') VALUES ('.str_pad('', count($inserting)*2-1, '?,').')');
$sth->execute(array_values($inserting)) or die(print_r($sth->errorInfo(), true));
如果你喜欢这种方法,你可以考虑以不同的方式填充数组,并可能放弃创建这么多个体变量。