2012-06-25 24 views
1

因此,我開始將所有的mysql/php工作數據庫查詢切換到PDO。我想知道下面的方法是否可以縮短。這個特殊的例子是使用一個大的註冊表單並將結果插入到數據庫中。我覺得這是比必要的更多的代碼...是否有一個更短的方法將其插入到數據庫中?運行長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注入?

謝謝!

+2

你可能會丟失'echo'和'或die()',但那樣的結構非常緊湊。如果來自處理變更表格聲明的人:你想明確指定每一列。當然,任何設置爲_default_值的字段都可以跳過。 – Wrikken

+1

丟失不提供值的列。在各種框架中還有用於PDO的包裝器,這將允許您在一次調用中將名稱的關聯數組發送到值,併爲您創建實際的SQL。 – Cfreak

+0

謝謝你們,我不確定。 @Cfreak所以如果我沒有像第一個字段那樣爲我的例子插入數據'',我不需要在sql中包含它,我假設我只是跳過它? – Zanrok

回答

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)); 

如果你喜歡這種方法,你可以考慮填充陣列以不同的方式,並可能放棄這麼多的各個變量的創建。

+0

再次感謝!我可能會堅持我現在的代碼,因爲它對我來說有點不那麼困惑。但是,謝謝你的建議,我可能會嘗試修改後面的想法。 – Zanrok