teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプルコード追加

2016/08/30 09:26

投稿

snowfaller
snowfaller

スコア125

answer CHANGED
@@ -21,4 +21,63 @@
21
21
  - 1セッションあたりに保持するmysqli_resultは1つに制限する
22
22
  - 場合によってはセッションのタイムアウトを短くする
23
23
 
24
- と言った考慮が必要です。
24
+ と言った考慮が必要です。
25
+ サンプルコード
26
+ ---
27
+ Amazonへ投げるための処理と言うことですので、
28
+
29
+ - テーブルの検索結果を1件づつ取り出して、5件取り出したらAmazonを呼び出す
30
+
31
+ と言う流れでサンプルを示します。
32
+ mysqliは非推奨とのことですのでPDOを使ったMySQLのアクセスで示します。
33
+ ```php
34
+ <?php
35
+ //アマゾンのAPIを呼び出す処理(適宜修正してください)
36
+ function toAmazon($requestObjects) {
37
+ $results = array();
38
+ foreach($requestObjects as $resultObject) {
39
+ array_push($results, $resultObject->variable);
40
+ }
41
+ return $results;
42
+ }
43
+
44
+ //MySQLに接続
45
+ $con = new PDO('mysql:host=<ホスト名>;dbname=<データベース名>;charset=utf8', '<ユーザ名>', '<パスワード>');
46
+
47
+ //SQLの準備
48
+ $stmt = $con->prepare('select * from test0001');
49
+
50
+ //SQLの実行
51
+ $stmt->execute();
52
+
53
+ //オブジェクト格納用配列
54
+ $requestObjects = array(); // Amazonへ投げるオブジェクト(テーブルのレコード)の配列
55
+ $resultAmazon = array(); // Amazonからの取得したオブジェクトの配列
56
+
57
+ while($rowObj = $stmt->fetchObject()) {
58
+ // 検索結果から1行づつオブジェクト(テーブルレコード)を取りだす
59
+ // 条件式は「=」で正しい。fetchObject()の戻り値がFALSEだったらループを抜ける。
60
+ array_push($requestObjects, $rowObj);
61
+ // Amazonへ投げるオブジェクトの配列に追加
62
+ if(count($requestObjects) == 5) {
63
+ // Amazonへ投げるオブジェクトの配列が5個になったらAmazon呼び出し
64
+ $resultAmazon = array_merge($resultAmazon, toAmazon($requestObjects));
65
+ $requestObjects = array();
66
+ // Amazonへ投げるオブジェクトの配列を空にする。
67
+ }
68
+ }
69
+ if(count($requestObjects) != 0) {
70
+ // Amazonへ投げるオブジェクトの配列がに要素が残っていたらAmazon呼び出し
71
+ $resultAmazon = array_merge($resultAmazon, toAmazon($requestObjects));
72
+ $requestObjects = array();
73
+ }
74
+ var_dump($resultAmazon);
75
+ ?>
76
+
77
+ ```
78
+ - 「could not find driver」と言うエラーが出力された場合は、php-pdo_mysqlパッケージを追加してください。(例: sudo yum install php-pdo_mysql)
79
+ - while文の条件式で検索結果から1行づつオブジェクト(レコード)を取得しています。オブジェクトからカラムの値は「$rowObj->カラム名」で参照できます。
80
+ - 今回は、取得したオブジェクトをarray_push($requestObjects, $rowObj)で配列に1つづつ追加しています。
81
+ - if(count($requestObjects) == 5)で$requestObjectsに要素が5つ貯まったか判断を行い、貯まっていたらAmazonを呼び出します。
82
+ - Amazonからの結果は、$resultAmazon = array_merge($resultAmazon, toAmazon($requestObjects))で$resultAmazonに追加します。
83
+ - エラー判定処理や、クリーンナップ処理(データベース切断処理)などは割愛しています。