質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Symfony1

Symfony1は、PHP5を対象に開発された、フルスタックなMVCフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Q&A

1回答

1802閲覧

PHPでDB接続をし、制限時間以内にデータ取得できなかった場合の判定ロジックを実装したい。

pgm_bakabon

総合スコア61

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Symfony1

Symfony1は、PHP5を対象に開発された、フルスタックなMVCフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

0グッド

0クリップ

投稿2018/08/03 09:41

編集2018/08/03 09:59

いつもお世話になっております。

掲題

PHPでDB接続をし、制限時間以内にデータ取得できなかった場合の判定ロジックを実装したい。

実現したいこと

3種のデータをDB(RDS)に接続して取得する処理があり、最終的に3種のデータを画面に表示します。
(3種のデータ:データA、データB、データCとします。)

3種のデータは、取得可能な時間を設定して、時間内に取得できなかった場合は、NULL扱いにします。
→ 例:1秒と設定した場合、1秒経過した時点で強制的にDB接続を終了し、データはNULLとして次の処理に進みたい。

以下の手順で実行したいです。

php

1①データAを取得します。 2②データAを、1秒以内に取得できなかった場合は、NULLのデータとし、次の処理に進みます。 3③データBを取得します。 4④データBを、1秒以内に取得できなかった場合は、NULLのデータとし、次の処理に進みます。 5⑤データCを取得します。 6⑥データCを、1秒以内に取得できなかった場合は、NULLのデータとし、次の処理に進みます。 7⑦画面を表示します。画面にはデータACで取得できた情報のみ表示します。

課題

1秒以内に取得できなかった場合 を判定するロジックをどう書けば良いのかわかりません。
是非お知恵をお貸しください。
よろしくお願いします。

やったこと

set_time_limit()を使ってみましたが、致命的なエラーを吐いてしまうため強制的に処理が中断してしまいました。

環境

PHP 5.3
Symfony 1.2
MySQL 5.6(Amazon RDS)

条件

・RDSの設定ではやりたくない。
・PHP.iniの設定ではやりたくない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PDO::setAttribute で PDO::ATTR_TIMEOUT を設定する。または、mysqli::optionsMYSQLI_OPT_CONNECT_TIMEOUT を設定する。
という方法を検索で見つけたけど、使ったことはありません。

microtime() で処理時間の計測を行って、ログを書き出す処理を書いたことはあります。

Sample

php

1<?php 2 3/** 4 * DB.class.php 5 */ 6class DB 7{ 8 9 const DB_NAME = 'sample'; 10 const DB_USER = 'root'; 11 const DB_PASSWORD = 'password'; 12 13 /** 14 * @var PDO 15 */ 16 private static $pdo = null; 17 18 /** 19 * @var PDOStatement 20 */ 21 private static $stmt = null; 22 23 /** 24 * getInstance 25 * @return \PDO 26 */ 27 public static function getInstance(): \PDO 28 { 29 if (!is_null(static::$pdo)) { 30 return static::$pdo; 31 } 32 $dsn = sprintf('mysql:host=127.0.0.1;dbname=%s;charset=utf8mb4', self::DB_NAME); 33 $pdo = new \PDO($dsn, self::DB_USER, self::DB_PASSWORD); 34 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 35 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 36 static::$pdo = $pdo; 37 return static::$pdo; 38 } 39 40 /** 41 * select 42 * @param string $sql 43 * @param array $params 44 * @return null|array 45 */ 46 public static function select(string $sql, array $params = []) 47 { 48 $pdo = self::getInstance(); 49 self::$stmt = $pdo->prepare($sql); 50 51 // start time 52 $start = microtime(true); 53 54 self::$stmt->execute($params); 55 56 // end time 57 $end = microtime(true); 58 $time = $end - $start; 59 60 if ($time > 1) { 61 return null; 62 } 63 return self::$stmt->fetchAll(); 64 } 65 66}

php

1<?php 2 3/** 4 * index.php 5 */ 6ini_set('display_errors', true); 7error_reporting(E_ALL); 8 9require 'classes/DB.class.php'; 10 11$rows_table1 = DB::select('select * from Table1'); 12$rows_table2 = DB::select('select * from Table2'); 13$rows_table3 = DB::select('select * from Table3');

投稿2018/08/03 09:51

編集2018/08/03 19:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pgm_bakabon

2018/08/03 10:18

早速ありがとうございます! ご教示いただいた方法を試してみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問