回答編集履歴

2

追記

2023/01/25 07:13

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -1,7 +1,69 @@
1
1
  追記
2
2
  ---
3
- 最初の回答では大文字小文字の問題と解答しましたが、スコープの問題ですね
3
+ 最初の回答では大文字小文字の問題と解答しましたが、スコープの問題でした
4
+ 関数の中で定義された変数は関数の外では使えません。
5
+
6
+ 現状の実装を拝見するに、自作関数そのもの(特に引数と戻り値の扱い)についての理解が追い付いていない様に見受けられますので、
7
+ まずは、
8
+ https://www.php.net/manual/ja/functions.user-defined.php
9
+ でごく簡単なサンプルから順に確認して理解を深めることをお勧めします。
10
+
11
+ 今回のケースだと、model.phpをインクルードしているのですが、実質的に以下の様に書いているのと同じことになります。
12
+
13
+ ```PHP
14
+ //ここから関数
15
+ function getDeviceData($params){
16
+ //DBの接続情報
17
+ include_once('config/database.php');
18
+
19
+ //DBコネクタを生成
20
+ $Mysqli = new mysqli('localhost', 'root', '', 'deviceswithinventory');
21
+ if ($Mysqli->connect_error) {
22
+ error_log($Mysqli_connect_error);
23
+ exit;
24
+ }
25
+ }
26
+ //ここまで関数
27
+
28
+ $sql = "SELECT * from devices where device_name = ? and serial_number = ? and manufacturer = ? and model = ? and os = ?";
29
+ // SQL文を$stmt オブジェクトに紐付ける
30
+ //関数の外で関数内で定義した変数は使えないので、$mysqliは存在せず、エラーになる
31
+ if ($stmt = $mysqli->prepare($sql)) { //$mysqliが同じスコープ内で定義されていない
32
+ //以下略
33
+ ```
34
+
4
- 現在回答修正中です。
35
+ これを修正しようとした場合
36
+
37
+ ```PHP
38
+ function getDeviceData(){
39
+ //引数とDB接続情報は使っていないので削除。理解が進んだら追加してみてください。
40
+ //DBコネクタを生成
41
+ $Mysqli = new mysqli('localhost', 'root', '', 'deviceswithinventory');
42
+ if ($Mysqli->connect_error) {
43
+ error_log($Mysqli_connect_error);
44
+ exit;
45
+ }
46
+ //戻り値として$Mysqiを呼び出し元に返す
47
+ return $Mysqli;
48
+ }
49
+ ```
50
+ として(関数名からすると不思議な動きですので、関数名自体をdb_connect()とかに変える方がいいとは思いますが、ここでは無視します)
51
+
52
+ devices.phpを
53
+ ```PHP
54
+ <?php
55
+ //①データ取得ロジックを呼び出す
56
+ include_once('model.php');
57
+ $mysqli = getDeviceData();
58
+
59
+ // ここでSQL文を作成する
60
+ $sql = "SELECT * from devices where device_name = ? and serial_number = ? and manufacturer = ? and model = ? and os = ?";
61
+ // SQL文を$stmt オブジェクトに紐付ける
62
+ if ($stmt = $mysqli->prepare($sql)) {
63
+ ```
64
+
65
+ という感じにすればgetDeviceData()内でnewされたmysqiオブジェクトを関数外で使用することが可能になります。
66
+
5
67
 
6
68
  最初の回答
7
69
  ---

1

修正中

2023/01/25 06:57

投稿

tanat
tanat

スコア18713

test CHANGED
@@ -1,3 +1,12 @@
1
+ 追記
2
+ ---
3
+ 最初の回答では大文字小文字の問題と解答しましたが、スコープの問題ですね。
4
+ 現在回答修正中です。
5
+
6
+ 最初の回答
7
+ ---
8
+
9
+
1
10
  PHPの変数は大文字と小文字が区別されるので、
2
11
  model.php
3
12
  ```PHP