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

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

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

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

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

1回答

1331閲覧

mysqlへの接続時のエラーについて(Codeigniter、Xdebug、mysql)

nkrchan

総合スコア12

MySQL

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

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2020/10/12 09:33

編集2020/10/13 00:45

前提・実現したいこと

CodeIgniterのバージョンを2.1から3.2にバージョンアップしました。
mysqlサーバーにmysqliで接続し、DBの検索処理等を行いたいです。

発生している問題・エラーメッセージ

modelsのTest_infoで$query->num_rowsがnullになります。
その後$insrt_arryの途中でTest_blogicのtry-catch文でエラーが捕捉されます。
$mysqli->connect_errorがnullになり、エラー内容がわからない状態です。

ERROR - 2020-10-12 10:35:27 --> Severity: Warning --> Test_blogic::_execute(): Property access is not allowed yet C:\develop\Test_project\application\models\Test_blogic.php 52 ERROR - 2020-10-12 10:35:27 --> Severity: Warning --> Test_blogic::_execute(): Couldn't fetch mysqli C:\develop\Test_project\application\models\Test_blogic.php 52

該当のソースコード

PHP

1//application/models/Test_info.php 2 3class Test_info extends Test_blogic 4{ 5 $this->db->where('eml_addrss',$eml_addrss); 6 $query = $this->db->get('test_info'); 7 if($query->num_rows == 0){ 8 9 $insrt_arry = array( 10 'entry_date' => $current_date, 11 'entry_time' => $current_time, 12 ); 13 } 14}

PHP

1//application/models/Test_blogic.php 2 3abstract class Test_blogic extends CI_Model 4{ 5 public function _execute($rqst) { 6 7 try { 8 9 $this->db->trans_start(); 10 11 $rslt = $this->execute($rqst); 12 13 } catch (Throwable $e) { 14 15 $mysqli = new mysqli('****', '****', '****', '****'); 16 17 //$mysqli->connect_errorはnullになります。 18 if ($mysqli->connect_error) { 19 ログ出力関数('WMCM0001', $mysqli->connect_error); 20 } 21 22 $db = $this->db; 23 if (isset($db)) { 24 25 $db->trans_rollback(); 26 $db->close(); 27 } 28 29 } finally { 30 31 $db = $this->db; 32 33 if (isset($db)) { 34 35 $db->trans_complete(); 36 $db->close(); 37 } 38 39 if (!isset($rslt)) { 40 41 $rslt = 処理; 42 43 } 44 45 return $rslt; 46 } 47 } 48}

PHP

1 2//application/config/database.php 3 4$active_group = 'default'; 5$query_builder = TRUE; 6 7$db['default'] = array( 8 'dsn' => '', 9 'hostname' => '***.**.**.***', 10 'username' => '****', 11 'password' => '****', 12 'database' => 'testdb', 13 'dbdriver' => 'mysqli', 14 'dbprefix' => '', 15 'pconnect' => TRUE, 16 'db_debug' => TRUE, 17 'cache_on' => FALSE, 18 'cachedir' => '', 19 'char_set' => 'utf8', 20 'dbcollat' => 'utf8_general_ci', 21 'swap_pre' => '', 22 'encrypt' => FALSE, 23 'compress' => FALSE, 24 'stricton' => FALSE, 25 'failover' => array(), 26 'save_queries' => TRUE 27);

PHP

1 2//application/config/autoload.php 3 4$autoload['libraries'] = array('database','user_agent','email'); 5

補足情報(FW/ツールのバージョンなど)

CodeIgniter 3.2
Xdebug
PHP 7.3.4

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

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

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

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

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

firegrape

2020/10/12 15:10

一つ気になったのは、mysqliとかの接続設定は codeigniterとかだとdatabase.phpとかで設定するはずですが、 それはしないのですか? べたで書かないといけない理由があるのでしょうか?
nkrchan

2020/10/12 22:36

説明不足で申し訳ありません。 database.phpで設定していましたので、ソースを追加いたしました。
firegrape

2020/10/12 23:46

あとは以下のファイルでDBに自動接続できる 設定を書けるみたいです。それも設定していますか? application/config/autoload.php
nkrchan

2020/10/13 00:46

ありがとうございます。 autoload.phpも設定しています。
firegrape

2020/10/13 00:58

であれば、 $mysqli = new mysqli('****', '****', '****', '****'); これがなくても接続できると思いますよ。
nkrchan

2020/10/13 08:20

ありがとうございます。「$mysqli = new mysqli('****', '****', '****', '****');」は不要だったんですね。 エラーの根本的な?原因は、Test_blogic.phpの「$db->close();」だったようです。。 トランザクションを実行した後に手動でDBの接続を切断しようとしたのがいけなかったのか?という予測なのですが、そのあたりの理解が乏しいので理由がよくわかりません・・。 後ほど解決方法を追記しようと思います。 丁寧にご回答いただき、ありがとうございました。また何かありましたら宜しくお願いいたします。
firegrape

2020/10/13 08:25

解決してよかったです~
guest

回答1

0

自己解決

エラーの解決方法

「application/config/database.php」の「pconnect(TRUE/FALSE(boolean)- 永続的な接続を使うかどうか。)」をTRUEにしている状態で「Test_blogic.php」に「$db->close();」の記述をしているのが原因でした。
「database.php」の「pconnect」を「FALSE」に変更したところ、エラーは出なくなりました。

投稿2020/10/14 00:16

編集2020/10/21 00:53
nkrchan

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問