電子書籍の厳選無料作品が豊富!

プログラム初心者です

最近PDO使うようになりましたがまったく使いこなせません
何回もSQL発行して効率わるいコードになりました(--;
一回のSQL発行にまとめる方法はありますか?

for ($i=0; $i<$count; $i++) {

$id=$Array[$i][0];
$name=$Array[$i][1];

$stmt = $pdo -> prepare("INSERT IGNORE INTO table(id,name) VALUES (?,?)");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->bindValue(2, $name, PDO::PARAM_STR);
$stmt->execute();

}


質問2
prepareのキャッシュを利かすってどうゆうことでしょうか?上の場合でもキャッシュ生かせていますか?

よろしくお願いします

A 回答 (2件)

こんな感じでいけないですか?



$pdo = new PDO($dsn,$user,$password);
$place_holders= implode(',', array_fill(0, count($Array), '(?,?)'));
$vals=array();
foreach($Array as $a){
$vals[]=$a[0];
$vals[]=$a[1];
}

$stmt = $pdo -> prepare("INSERT IGNORE INTO table(id,name) VALUES".$place_holders);
$stmt->execute($vals);
    • good
    • 0
この回答へのお礼

回答ありがとうございます
これはすごい速いですね。20倍以上高速なんですが(汗
ここまで早くなるとわ・・・さすがです

実測値です(配列の中身10個)
0.046875秒掛かりました。1回目
0.046875秒掛かりました。2回目
0.0625秒掛かりました。3回目

お礼日時:2014/03/29 01:03

$stmt = $pdo -> prepare("INSERT IGNORE INTO table(id,name) VALUES (?,?)");





ループ中で同じものを繰り返しprepareしているのが無駄です。1回作ってしまえば何回もbindValue・executeで使いまわすことが出来ます。for文の前に出してください。これが「キャッシュを生かす」ということです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
キャッシュを生かすとはそうゆうことだったですね勉強になりました。ありがとうございます

お礼日時:2014/03/29 01:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!