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

回答編集履歴

3

追記

2018/08/03 19:25

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,91 @@
1
1
  [PDO::setAttribute](http://php.net/manual/ja/pdo.setattribute.php) で `PDO::ATTR_TIMEOUT` を設定する。または、[mysqli::options](http://php.net/manual/ja/mysqli.options.php)で`MYSQLI_OPT_CONNECT_TIMEOUT` を設定する。
2
2
  という方法を検索で見つけたけど、使ったことはありません。
3
3
 
4
- `microtime()` で処理時間の計測を行って、ログを書き出す処理を書いたことはあります。
4
+ `microtime()` で処理時間の計測を行って、ログを書き出す処理を書いたことはあります。
5
+
6
+ ### Sample
7
+
8
+ ```php
9
+ <?php
10
+
11
+ /**
12
+ * DB.class.php
13
+ */
14
+ class DB
15
+ {
16
+
17
+ const DB_NAME = 'sample';
18
+ const DB_USER = 'root';
19
+ const DB_PASSWORD = 'password';
20
+
21
+ /**
22
+ * @var PDO
23
+ */
24
+ private static $pdo = null;
25
+
26
+ /**
27
+ * @var PDOStatement
28
+ */
29
+ private static $stmt = null;
30
+
31
+ /**
32
+ * getInstance
33
+ * @return \PDO
34
+ */
35
+ public static function getInstance(): \PDO
36
+ {
37
+ if (!is_null(static::$pdo)) {
38
+ return static::$pdo;
39
+ }
40
+ $dsn = sprintf('mysql:host=127.0.0.1;dbname=%s;charset=utf8mb4', self::DB_NAME);
41
+ $pdo = new \PDO($dsn, self::DB_USER, self::DB_PASSWORD);
42
+ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
43
+ $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
44
+ static::$pdo = $pdo;
45
+ return static::$pdo;
46
+ }
47
+
48
+ /**
49
+ * select
50
+ * @param string $sql
51
+ * @param array $params
52
+ * @return null|array
53
+ */
54
+ public static function select(string $sql, array $params = [])
55
+ {
56
+ $pdo = self::getInstance();
57
+ self::$stmt = $pdo->prepare($sql);
58
+
59
+ // start time
60
+ $start = microtime(true);
61
+
62
+ self::$stmt->execute($params);
63
+
64
+ // end time
65
+ $end = microtime(true);
66
+ $time = $end - $start;
67
+
68
+ if ($time > 1) {
69
+ return null;
70
+ }
71
+ return self::$stmt->fetchAll();
72
+ }
73
+
74
+ }
75
+ ```
76
+
77
+ ```php
78
+ <?php
79
+
80
+ /**
81
+ * index.php
82
+ */
83
+ ini_set('display_errors', true);
84
+ error_reporting(E_ALL);
85
+
86
+ require 'classes/DB.class.php';
87
+
88
+ $rows_table1 = DB::select('select * from Table1');
89
+ $rows_table2 = DB::select('select * from Table2');
90
+ $rows_table3 = DB::select('select * from Table3');
91
+ ```

2

追記

2018/08/03 19:25

投稿

退会済みユーザー
answer CHANGED
@@ -1,2 +1,4 @@
1
- [PDO::setAttribute](http://php.net/manual/ja/pdo.setattribute.php) で `PDO::ATTR_TIMEOUT` を設定する。
1
+ [PDO::setAttribute](http://php.net/manual/ja/pdo.setattribute.php) で `PDO::ATTR_TIMEOUT` を設定する。または、[mysqli::options](http://php.net/manual/ja/mysqli.options.php)で`MYSQLI_OPT_CONNECT_TIMEOUT` を設定する。
2
- という方法を検索で見つけたけど、使ったことはありません。
2
+ という方法を検索で見つけたけど、使ったことはありません。
3
+
4
+ `microtime()` で処理時間の計測を行って、ログを書き出す処理を書いたことはあります。

1

追記

2018/08/03 10:12

投稿

退会済みユーザー
answer CHANGED
File without changes