![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
プログラム初心者です
テスト用に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で質問しましょう!
似たような質問が見つかりました
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP php エラー 2 2022/10/23 16:43
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP PHPでMysqlにデータがあるかどうか判別したい 1 2023/03/02 11:48
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- Wi-Fi・無線LAN すいません wi-fi の接続で分からないことが wi-fi 設定で、接続タイプ の PPPoE の 8 2022/04/22 20:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの記述で値が取れません。
-
データベースに存在するデータ...
-
一度検索されたものに対するソ...
-
SQL文の処理を関数化したいです
-
php mysql接続での書き方
-
繰り返しのコードをまとめて簡...
-
VBA ACCESS SQL...
-
DBから抜き出した値を表示する方法
-
SQL Serverからのvarchar型のデ...
-
php テーブルを作れない
-
phpのエラーについてです
-
例外処理
-
Function内でのMySQLデータベー...
-
Resource id #3 をフィールドの...
-
連想二次元配列のUNIXTIMEでの...
-
DBに入力されている値のセレ...
-
PHP 勤務時間の合計を出したい
-
sprintf関数での%Sが分かりませ...
-
XAMMPが起動しません。
-
VBAをつかってクエリの情報を抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
ResultSetインターフェイスでの...
-
Pro*Cの構文エラー
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
VBA ACCESS SQL...
-
INSERT,DELETEを同時に
-
MySQLのINSERT時にたまに重複に...
-
VB.NET エラーになる箇...
-
PHP&MySQLでの文字列+数列の一...
-
PHP初心者です。syntax error, ...
-
like検索の複数キーワードで、...
-
php MySQL で、更新ボタンを押...
-
php postgres Insert と updat...
-
チェックボックスからの複数検...
-
ASPでSQL文を使う場合に。
-
Q&Aサイトを作成していてURLの...
-
phpでforeach ($stmt as $row)...
-
php データベースから値を取得する
おすすめ情報