
プログラム初心者です
テスト用にmysqlのテストdataをつくりたいです
PHPでダミーDATA10万件をinsertする方法を教えてください
カラムはuser_id gif_id tag の三つです
user_id gif_idはなにも記入しなくてもいいです。(数字が入る予定です)
tagはあ~お、か~こまで1文字をランダムに値を変化させながら入れられますか?(無理なら同じタグでいいです)
XAMPP(ローカル)で作るので負荷かかってもかまいません
mysqli_query($link,sprintf('INSERT INTO tag(user_id,gif_id,tag) VALUES(%d,%d,"%s"),(%d,%d,"%s","%s")',
mysqli_real_escape_string($link,$id),
mysqli_real_escape_string($link,$gif_id),
mysqli_real_escape_string($link,$tag),
mysqli_real_escape_string($link,$id),
mysqli_real_escape_string($link,$gif_id),
mysqli_real_escape_string($link,$tag2)
));
よろしくお願いします
No.4ベストアンサー
- 回答日時:
PDOでプリペアド処理するとして一行ずつ投入するのはナンセンス
まとめて投入してください。
ざっとテストしてみて14~15倍スピード差がありました。
<?PHP
$pdo = new PDO($dsn,$user,$password);
$a=array("あ","い","う","え","お","か","き","く","け","こ");
$count=100000;
val="";
$datas=array();
for($i=0;$i<$count;$i++){
$num=rand(0,count($a)-1);
$datas[]=$a[$num];
if($val!=="") $val.=",";
$val.="(?)";
}
$sql = "insert ignore into tbl(tag) values".$val;
$stmt = $pdo->prepare( $sql);
$num=rand(0,count($a)-1);
$stmt->bindValue(1,$a[$num]);
$stmt->execute($datas);
?>
回答ありがとうございます
書き込めました。
executeに配列で渡せるのですね、勉強不足でした
PDO速いですね9秒くらいで10万行書き込めました
感謝いたします
No.3
- 回答日時:
>慣れてないのでバインド変数値の所をドンドンと変えてSQLを実行する方法がわかりません
「慣れていない」のではなく「理解していない」だけ。
$stmt = $pdo->prepare('INSERT INTO tag(user_id, gif_id, tag) VALUES (?, ?, ?)');
を実行したら
$stmt->bindValueと$stmt->execute();は繰り返し実行出来る(ループ内でbindする値を変えてexecuteする)
マニュアルにもPDOstatement(prepareの戻り値)に対して複数のexecuteを実行する例が載っている(というか、その例しか載っていない)。
http://www.php.net/manual/ja/pdo.prepare.php
No.2
- 回答日時:
こういうときこそプレースホルダの出番。
プレースホルダは、セキュリティ対策のみの機能ではない。
同じSQLでバインド変数値の所をドンドンと変えてSQLを実行できるからこそ便利な機能。
知らない人だとわざわざ同じSQLを何回も書いてっていう無駄なことをやるからね。質問者もそうならないように機能の本質を理解しておこう。
回答ありがとうございます
一晩勉強してPDO接続から疑問符プレースホルダを使えるまでになりました
しかし、慣れてないのでバインド変数値の所をドンドンと変えてSQLを実行する方法がわかりません
もし、よければ教えてください。
よろしくお願いします
$stmt = $pdo->prepare('INSERT INTO tag(user_id, gif_id, tag) VALUES (?, ?, ?)');
$stmt->bindValue(1, 67, PDO::PARAM_INT);
$stmt->bindValue(2, 95, PDO::PARAM_INT);
$stmt->bindValue(3, 'あ');
$stmt->execute();
No.1
- 回答日時:
>tagはあ~お、か~こまで1文字をランダムに値を変化させながら入れられますか?
の言いたいところがいまいちわかりませんが、こういうこと?
<?PHP
$a=array("あ","い","う","え","お","か","き","く","け","こ");
for($i=0;$i<100;$i++){
$num=rand(0,count($a)-1);
print($a[$num]);
}
?>
ちなみに、getやpostでうけとるわけでもない安全なデータであれば
エスケープしたりsprintfする必要はないかと。
それと1件ごとinsertを発行すると無駄が多いです
100データとか1000データをまとめて
INSERT INTO tag(tag) VALUES('あ'),('い'),・・・・
という書式でやる方が効率的です
まとめ具合によりますが数倍から数十倍スピードが違うと思います。
(まとめすぎるとオーバーフローするので適当に調整が必要ですが)
回答ありがとうございます
そんな感じです。こうやるんですね。勉強になりました
しかし、効率よくテストDATA作る方法がピンときません
PDOを勉強して少し使えるようになったのでプレースホルダ使って効率よくINSERTする方法がありましたらよろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLインジェクション対策
-
Pro*Cの構文エラー
-
order by での変数使用について。
-
データベースに存在するデータ...
-
php postgres Insert と updat...
-
エクセルVBAのデータベース接続...
-
VBAをつかってクエリの情報を抽...
-
MySQLでデータベースにデータin...
-
アラートでyes noを作りたいです。
-
LocalのNotesメールDBをVBAで参...
-
SQLiteでDBに書き込みできません
-
ヒアドキュメントでSQLを書く事...
-
phpのエラーについてです
-
SQL文が実行できません
-
テキストボックスに入れた内容...
-
【添削願】クエリ文、エラーが...
-
アポストロフィを含む文字列の追加
-
実行時エラー3131 FROM 句の構...
-
エラー3011
-
RFC822形式での日時の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pro*Cの構文エラー
-
JAVA SQLServerException 列名 ...
-
PHPからデータベースに接続した...
-
insert1つの処理でもトランザ...
-
<VB.NET>INSERT文でDBにデータ...
-
Q&Aサイトを作成していてURLの...
-
like検索の複数キーワードで、...
-
VBA ACCESS SQL...
-
MySQLのINSERT時にたまに重複に...
-
データベースに存在するデータ...
-
VB.NET エラーになる箇...
-
mysql php 複数のクエリ
-
ODBC接続でデータ件数を求...
-
phpで複数の検索語を検索対象に...
-
チェックボックスからの複数検...
-
PHP+PDO+MYSQL で実行されたSQ...
-
PHP&MySQLでの文字列+数列の一...
-
PDOを使って複数キーワード検索...
-
エクセルVBAのデータベース接続...
-
phpmyadminにタグを格納するには
おすすめ情報