1

だから私はすべての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インジェクションから保護しますか?

ありがとうございました!

4

1 に答える 1

1

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

このアプローチが気に入った場合は、別の方法で配列にデータを入力することを検討し、非常に多くの個別の変数を作成することを控える可能性があります。

于 2012-06-25T23:06:21.247 に答える