目次
" > テスト ページのクリーンアップ
" > プラグインの準備
" > テーブル構築のアイデア:
" > データベース、テーブル
" > データベースへの接続
配置文件类
  需求分析:" >  需求分析:
  思路:" >  思路:
  代码实现" >  代码实现
错误日志记录
  测试" >  测试
提出问题:
ホームページ バックエンド開発 PHPチュートリアル PHPソースコードデータベース構築テーブル・設定ファイル・エラーログ方法

PHPソースコードデータベース構築テーブル・設定ファイル・エラーログ方法

Jul 07, 2018 am 11:37 AM
phpのソースコード

この記事では、PHP でのデータベース構築方法とテーブル構成ファイルのエラーログを中心に紹介します。参考になるものがありましたので、共有します。困っている友人は参考にしてください。

主に:

  1. #組織フレームワーク

  2. データベースとテーブルの構築

  3. 構成ファイル クラス

  4. エラーログ

  5. 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    --------------本篇后文件结构:--------------------------------------

    blog

    ├─App

    │  ├─Model 模型目录

    │  ├─View 视图目录

    │  │  ├─Admin后台目录

    │  │  └─Home前台目录

    │  ├─Common 配置目录

    │  │  └─config.php  配置文件

    │  ├─Log 日志目录

    │  │  └─log.txt  日志文件

    │  ├─Controller 控制器

    │  │  ├─Admin后台

    │  │  │  └─DemoController.class.php 测试控制器

    │  │  └─Home前台

    ├─Public   静态公共文件(js,css,images)

    │  ├─Plugins 插件

    │  ├─Back后台

    │  └─Home前台

    ├─Frame 公共使用的类

    │   ├─BaseModel.class.php 数据库连接类

    │   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)

    │   ├─FactoryModel.class.php  模型工厂类

    │   ├─Log.class.php  日志厂类

    │   ├─Config.class.php  配置文件读取类

    │   ├─Init.class.php  初始化应用类

    │   └─MySQLDB.class.php 数据库操作工具类

    └─index.php  入口文件

    -----------------------------------------------------------------------------------------------------

    ログイン後にコピー

前の記事で構築した mvc フレームワーク構造を使用して、ブログ プロジェクトの開発を正式に開始しました。まずデータテーブルを作成し、次にバックエンドの構築を開始し、フロントエンドでデータを表示し、ブログのメインモジュールの表示を完了します。

プロジェクトのソース コードをダウンロードして表示します: https://gitee.com/NewbiesYang/young_blog

組織フレームワーク

テスト ページのクリーンアップ

# 1) フレームワーク構造は、ユーザー ログイン テスト ページとバックグラウンド ホーム ページを使用して、以前に構築されました。ここでそれらをすべて削除し、フロントエンド ページとバックエンド ページを構築するために最初から始めます。 ThinkPHP や Laravel、その他のフレームワークをダウンロードするときと似ています。では、このマイクロフレームワーク上でプロジェクトを構築してみましょう。

2) 実際の開発では、フロントエンド担当者が開発用に用意した静的ページを使用します。したがって、[テンプレート ホーム] または他の Web サイトから背景テンプレートとフロントエンド ブログの静的ページをダウンロードすることもできます。次に、バックエンドの開発に集中して作業をスピードアップします。このプロジェクトは調査研究のためのものですので、心配する必要はありません。


1

2

3

4

5

原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。

 

 此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的

 

于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。

ログイン後にコピー

フレームワーク構造:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

--------------清理后MVC框架文件结构:--------------------------------------

blog

├─App

│  ├─Model 模型目录

│  ├─View 视图目录

│  │  ├─Back后台

│  │  └─Home前台

│  ├─Controller 控制器目录

│  │  ├─Back后台

│  │  └─Home前台

├─Public   静态公共文件(js,css,images)

│  ├─Plugins 插件

│  ├─Back后台

│  └─Home前台

├─Frame 公共使用的类

│   ├─BaseModel.class.php 数据库连接类

│   ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)

│   ├─FactoryModel.class.php  模型工厂类

│   ├─Init.class.php  初始化应用类

│   └─MySQLDB.class.php 数据库操作工具类

└─index.php  入口文件

-----------------------------------------------------------------

ログイン後にコピー

後続の開発はディレクトリ構造ファイルをコピーするだけで済み、これに基づいて実行できます。 。 発展した。

送信コードの提出

1

2

git add -A

git commit -m "清理MVC结构"git push origin master

ログイン後にコピー

プラグインの準備

1)layuiプラグイン:バックグラウンドプログラムを構築し、layuiフロントを使用するための準備をします。 -end フレームワーク. 個人的にはこのフレームワークが最高だと思います バックエンド インターフェイスはかなり優れています。いくつかの比較使用モジュールも含まれています。

ブートストラップを使用することもできますが、私はフロントページに使用することを好みます。

ダウンロード URL: http://www.layui.com/

2) jQuery ライブラリ: 特に ajax リクエストを頻繁に使用する場合、DOM を操作する方が便利です。

3) その他のプラグイン: Ueditor エディタなど。必要に応じてダウンロードしてください。通常、プラグインにはデモのサンプルが用意されており、Web 開発を理解していればサンプルやマニュアルに従えば基本的に使用できます。

上記のプラグインに詳しくなくても大丈夫、公式サイトにマニュアルがあるので、必要なモジュールがあればマニュアルを確認して、積み木と同じように使ってください。 . より良い成績を収めたい場合は、もちろん、より多くの時間を費やし、より多くの練習をする必要があります。プログラム管理者がバックグラウンドで使用することを想定していますが、非常に美しい必要はなく、実用的であれば十分です。

データベースの構築とテーブルの構築

準備: ブランチの作成

1

2

$ git checkout master

$ git checkout -b "start-admin-module"

ログイン後にコピー

テーブル構築のアイデア:

ベースブログ テンプレートでは、ホームページから開始します。 分析: 対応するデータ テーブルを確立するためにどの動的データが必要かを分析します。

ユーザー: ログイン、登録、変更、削除

記事: カテゴリ管理、ブログ投稿管理、コメント管理

ロール管理: 管理者、一般ユーザー

メニュー管理: 権限が異なる担当者には、対応するメニューバーも異なります

テーブル作成ツールを自由に選択できます。最初の段階では、テーブル作成ステートメントを手動で作成し、ツールに慣れたらすぐにツールを使用します。このプロジェクトでは、Navicat を使用してデータベースとテーブルを作成します

データベース、テーブル

1) データベースを作成します: php_blog

1

create database php_blog charset utf8

ログイン後にコピー

2) ユーザー テーブル: y_users

1

2

3

4

5

6

7

8

9

10

11

12

13

CREATE TABLE `y_user` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户主键',

  `username` varchar(20) NOT NULL COMMENT '用户名',

  `password` char(32) NOT NULL COMMENT '密码',

  `email` varchar(50) NOT NULL DEFAULT '' COMMENT '注册邮箱',

  `token_email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱验证',

  `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态, 0-正常,1-禁用',

  `gid` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '角色id,1-管理员,2-普通用户,0-无效',

  `login_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后登录的ip地址',

  `login_times` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数',

  `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '注册时间',

  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间',  PRIMARY KEY (`id`),  UNIQUE KEY `username` (`username`),  UNIQUE KEY `email` (`email`)

) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';

ログイン後にコピー

ユーザーテーブル SQL

3) ロールテーブル: y_user_group

1

2

3

4

5

CREATE TABLE `y_user_group` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',

  `name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',

  `auths` varchar(255) NOT NULL DEFAULT '' COMMENT '角色权限',  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

ログイン後にコピー

ロールテーブル SQL

4 ) メニューテーブル: y_menus

1

2

3

4

5

6

7

8

9

10

CREATE TABLE `y_menus` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单id',

  `title` varchar(20) DEFAULT '' COMMENT '菜单名称',

  `controller` varchar(30) DEFAULT '' COMMENT '控制器名称',

  `action` varchar(30) DEFAULT '' COMMENT '操作名称',

  `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态,1-正常,0-禁用',

  `is_hidden` tinyint(1) unsigned DEFAULT '0' COMMENT '是否隐藏,0-正常显示,1-隐藏',

  `sort` int(10) unsigned DEFAULT '0' COMMENT '排序',

  `pid` int(10) unsigned DEFAULT '0' COMMENT '上一级菜单',  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';

ログイン後にコピー

メニューテーブルSQL

5) 記事テーブルy_article

1

2

3

4

5

6

7

8

9

10

11

12

13

14

CREATE TABLE `y_article` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',

  `title` varchar(60) NOT NULL DEFAULT '' COMMENT '标题',

  `description` varchar(200) NOT NULL DEFAULT '' COMMENT '文章简介',

  `content` text NOT NULL COMMENT '内容',

  `cid` int(10) unsigned NOT NULL COMMENT '文章类别',

  `pic` varchar(150) NOT NULL DEFAULT '' COMMENT '文章封面图',

  `pic_watermark` varchar(150) NOT NULL DEFAULT '' COMMENT '水印图',

  `pic_thumb` varchar(150) NOT NULL DEFAULT '' COMMENT '缩略图',

  `uid` int(10) unsigned NOT NULL COMMENT '作者',

  `clicks` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '阅读数(点击数)',

  `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',

  `created_at` int(11) NOT NULL DEFAULT '0' COMMENT '发布时间',  PRIMARY KEY (`id`),  KEY `title` (`title`),  KEY `uid` (`uid`),  KEY `clicks` (`clicks`),  KEY `cid` (`cid`) USING BTREE

) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='文章表';

ログイン後にコピー

記事テーブルSQL

6) 記事カテゴリテーブル y_category

1

2

3

4

5

CREATE TABLE `y_category` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类id',

  `catename` varchar(15) NOT NULL COMMENT '分类名',

  `description` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='文章类别表';

ログイン後にコピー

記事カテゴリテーブル SQL

7) コメント(返信)テーブル y_comment

1

2

3

4

5

6

7

CREATE TABLE `y_comment` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论id',

  `uid` int(10) unsigned NOT NULL COMMENT '评论者',

  `created_at` int(11) DEFAULT NULL COMMENT '评论时间',

  `content` varchar(255) NOT NULL DEFAULT '' COMMENT '评论内容',

  `aid` int(10) unsigned NOT NULL COMMENT '被评论的文章',  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='评论(回复)表';

ログイン後にコピー

コメント(返信)テーブル SQL

8) セッションデータテーブル y_session (実際には必要ありません。目的は「セッションをデータベースに書き込む」操作です)

1

2

3

4

5

CREATE TABLE `y_session` (

  `sess_id` varchar(50) NOT NULL DEFAULT '' COMMENT 'session id',

  `data` text NOT NULL COMMENT 'session数据',

  `created_at` int(11) NOT NULL COMMENT 'session创建时间',  PRIMARY KEY (`sess_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='session数据表';

ログイン後にコピー

セッション データ テーブル SQL

複雑になりすぎないように、これらのデータ テーブルは一時的に作成され、後でフィールドを調整できます。モジュール関数を追加する必要がある場合は、それに応じて対応するデータ テーブルを追加できます。

データベースへの接続

badeModel [Frame/BaseModel.class.php]のデータコネクションの配列情報を変更します(設定ファイルクラスを使用する場合は、ここでは省略できます)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

1 class BaseModel {

2     。。。

3     。。。

4     。。。

5     function __construct(array $config=null)

6     {

7         $conf = array(

8             'host'=>'localhost',

9             'user'=>'root',

10             'pwd'=>'root',

11             'port'=>'3306',

12             'charset'=>'utf8',

13             'dbname'=>'php_blog',

14         );

15         $conf = empty($config)? $conf : array_merge($conf,$config);

16         $this->db = Db::getDb($conf);

17     }

18 }

ログイン後にコピー

设置连接数据库信息

配置文件类

  需求分析:

    为了框架便于数据库连接以及方便读取配置文件。如 希望在 App/Common/config.php 做一些配置项,要求能读取这些配置并应用到项目

  思路:

1

2

3

4

5

6

7

8

9

10

11

step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件

 

step 2:  在Frame/目录下创建读取配置文件类 Config.class.php

 

step 3: 设置自动加载 读取配置类

 

step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类

 

step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取

 

step 6: 测试连接数据结果,验证获取配置

ログイン後にコピー


实现连接数据库-读取数据库配置信息思路

  代码实现

    1) 创建配置文件config.php 【App/Common/Config.php】

1

2

3

4

5

6

7

8

9

<?php/**

 * 配置文件

 * User: young */return [    //数据库连接配置

    &#39;host&#39;=>&#39;localhost&#39;,

    &#39;user&#39;=>&#39;root&#39;,

    &#39;pwd&#39;=>&#39;root&#39;,

    &#39;port&#39;=>&#39;3306&#39;,

    &#39;charset&#39;=>&#39;utf8&#39;,

    &#39;dbname&#39;=>&#39;php_blog&#39;,];

ログイン後にコピー

配置文件-数据库配置信息

    2) 创建读取配置文件类 【Frame/Config.class.php】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

1 <?php

2 /**

3  * 配置文件读取类

4  * User: young

5  */

7 class Config

8 {

9     protected static $ins = null;  //本类实例

10     protected $cfg = array(); //存储配置项

11

12     /**

13      *  获取本类实例

14      * @access public

15      * @return  object     本类的单例对象

16      */

17     public static function getIns() {

18         if(false === (self::$ins instanceof self)){

19             self::$ins = new self();

20         }

21         return self::$ins;

22     }

23

24     /**

25      *  构造方法: 读取配置项

26      * @access public

27      * @return  void

28      */

29     final protected function __construct() {

30         require APP.&#39;Common&#39;.DS.&#39;config.php&#39;; //读取配置项

31         $this->cfg = $cfg;

32     }

33

34     /**

35      * 根据指定的配置项,返回该配置项的值

36      * @param string $k  配置项

37      * @return mixed|null 返回配置项的数据

38      */

39     public function __get($k) {

40         if(!isset($this->cfg[$k])) {

41             return null;

42         }

43         return $this->cfg[$k];

44     }

45

46

47     /**

48      * 根据指定的配置项,返回配置项的值

49      * @param  string $k 配置项名称

50      * @param string $v 配置项对应的值

51      */

52     public function __set($k,$v) {

53         $this->cfg[$k] = $v;

54     }

55 }

ログイン後にコピー

    3) 自动加载配置类

      需要自动加载该类, 该类在Frame目录下, 所以可以写入到 Init.class.php 类中的属性数组中 【Frame/Init.class.php】

1

2

3

4

5

6

7

8

9

10

11

12

<?php

/**

 * 初始化应用类

 * User: young

 */

class Init

{

    protected static $frame = array(&#39;BaseController&#39;,&#39;BaseModel&#39;,&#39;Db&#39;,&#39;FactoryModel&#39;,&#39;Config&#39;);

。。。

。。。

。。。

自动加载配置类

ログイン後にコピー

    4)基础模型类实例化配置类【Frame/BaseModel.class.php】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?php

/**

 * BaseModel.class.php 基础模型类

 *     连接数据库

 *  @author young

 */

class BaseModel

{

    protected $db = null;

    /**

     * 构造方法: 实例化数据库类

     * @access public

     */

    function __construct()

    {

       $conf =  Config::getIns(); //读取配置项实例

        $this->db = Db::getDb($conf);

    }

}

ログイン後にコピー

    5)数据库读取配置项信息 【Frame/Db.class.php】     

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<?php

/**

 * Db.class.php 数据库操作工具类

 * @author young

 */

class Db {

。。。

。。。

。。。

    /**

     * 构造方法: 保存数据库连接信息,连接数据库

     * @access private

     * @param array $conf 数据库连接信息

     */

    private function __construct($conf)

    {

        $this->host = $conf->host;

        $this->user = $conf->user;

        $this->pwd = $conf->pwd;

        $this->port = $conf->port;

        $this->charset = $conf->charset;

        $this->dbname = $conf->dbname;

        $this->connect();

    }

。。。

。。。

。。。

}

数据库工具类获取配置信息

ログイン後にコピー
ログイン後にコピー

    6) 测试 在App/Controller/Home/DemoController.class.php 用于测试数据库连接情况

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

/**

 * 测试控制器类

 * User: young

 */

 

class DemoController extends BaseController

{

    public function test()

    {

        $db = new BaseModel();

        $data = $db->db->getAllRows("select * from y_user");

        var_dump($data);

    }

}

ログイン後にコピー

测试控制器类测试连接数据库

  注: 前提,需要将BaseModel.class.php中的$db属性先临时修改为public公开,才能测试成功 (原因:在Demo控制器中实例化的基础模型类,数据库操作实例是放在类的属性db中,外部不能访问protected属性), 本节所有测试,可以临时将db设置为公开的。

还可以使用配置如: 上传目录,网站配置信息等,根据需求自定义配置需求,再通过读取配置类读取配置的数据

提交代码

1

2

git add -A

git commit -m "完成读取配置文件类"

ログイン後にコピー

错误日志记录

  除了开发阶段调试错误, 项目上线一般会将错误信息写入指定文件中。安全性更好。

  需求分析:

    将错误写入日志文件中,这里暂时主要记录数据库操作的错误。 如:默认将错误记录在App/log/logError.txt。 如果在配置文件中进行了配置,则将日志信息写入到配置项log指定的目录中

  思路:

1

2

3

4

5

6

7

8

9

step 1: 制作日志类Frame/Log.class.php, 用于将错误信息写入到指定文件中。  (设置日志文件位置,正好可以利用上面写的配置项,通过读取配置来实现)

 

step 2: 在基础模型类BaseModel中,读取配置项后, 可以将日志目录路径写入常量。 使用try..catch 捕捉异常,将错误写入日志

 

step 3: 实现日志类自动加载。Log类在Frame目录中,所以只要在初始化应用类Init中的属性$frame数组中加入 “Log”

 

step 4: 记录错误。 数据库连接可能失败, sql语句可能执行失败

 

step 5: 测试错误日志记录功

ログイン後にコピー

实现错误日志记录过程思路

  代码实现

  1) 制作错误日志类 【Frame/Log.class.php】

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<?php

/**

 * Db.class.php 数据库操作工具类

 * @author young

 */

class Db {

。。。

。。。

。。。

    /**

     * 构造方法: 保存数据库连接信息,连接数据库

     * @access private

     * @param array $conf 数据库连接信息

     */

    private function __construct($conf)

    {

        $this->host = $conf->host;

        $this->user = $conf->user;

        $this->pwd = $conf->pwd;

        $this->port = $conf->port;

        $this->charset = $conf->charset;

        $this->dbname = $conf->dbname;

        $this->connect();

    }

。。。

。。。

。。。

}

数据库工具类获取配置信息

ログイン後にコピー
ログイン後にコピー

  2) 读取日志位置,捕捉错误 【Frame/BaseModel.class.php】

    发生错误记录后,这里只是简单使用exit(..)退出, 可以自定error错误页面会更好

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

<?php

/**

 * BaseModel.class.php 基础模型类

 *     连接数据库,捕捉记录错误

 *  @author young

 */

class BaseModel

{

    Public $db = null;

    /**

     * 构造方法: 实例化数据库类

     * @access public

     */

    function __construct()

    {

        $conf =  Config::getIns(); //读取配置项实例

        //读取日志配置项目 并写成常量

        $logPath = $conf->log;

        $logPath = !isset($logPath) ? APP."log".DS  : $logPath;

        define(&#39;LOG&#39;,$logPath);

        //监控数据库操作

        try {

            $this->db = Db::getDb($conf);

        }catch(Exception $e) {

            $err = &#39;&#39;;

            $err .= &#39;错误代码:&#39; . $e->getCode() . "\r\n";

            $err .= &#39;错误信息:&#39; . $e->getMessage() . "\r\n";

            $err .=  &#39;文件:&#39; . $e->getFile() . "\r\n";

            $err .=  &#39;行号:&#39; . $e->getLine() . "\r\n\r\n";

            Log::write($err);

            exit("<h2>客官!页面暂时无法响应,请稍后访问</h2>");

        }

    }

}

点击查看【基础模型类中监测并记录错误】

ログイン後にコピー

  3)自动加载日志记录类 【Frame/Init.class.php】

1

2

3

4

5

6

7

8

9

10

11

12

<?php

/**

 * 初始化应用类

 * User: young

 */

class Init

{

    protected static $frame = array(&#39;BaseController&#39;,&#39;BaseModel&#39;,&#39;Db&#39;,&#39;FactoryModel&#39;,&#39;Config&#39;,&#39;Log&#39;);

。。。

。。。

。。。

点击查看【自动加载日志类】

ログイン後にコピー

  4) 记录错误 【Frame/Db.class.php】

数据库连接可能发生错误处理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

class Db

{

。。。

。。。

。。。

    /**

     * 连接数据库,设置编码,选库

     * @access private

     */

    private function connect()

    {

        $this->link = @ mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") ;

        if(!$this -> link) {

            $error = new Exception("数据库连接不上",10000);

            throw $error;

        }

        $this->setCharset($this->charset);

        $this->useDb($this->dbname);

    }

。。。

。。。

。。。

点击查看【数据库连接错误抛出】

ログイン後にコピー

sql语句发生错误处理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

class Db

{

。。。

。。。

。。。

    /**

     * 执行sql语句

     * @param  string $sql sql语句

     * @return mixed

     */

    private function query($sql)

    {

        $result = mysql_query($sql, $this->link);

//        if(false === $result) {

//            echo "<p>sql执行失败!<br>";

//            echo "<br>失败语句:".$sql;

//            echo "<br>错误代号".mysql_errno();

//            echo "<br>错误提示: ".mysql_error()."</p>";

//            exit();

//        }

        if(false === $result) {

            $err = "sql执行失败!\r\n失败语句:".$sql."\r\n错误代号:".mysql_errno()."\r\n错误提示:".mysql_error()."\r\n\r\n";

            Log::write($err);

            exit("<h2>查询出错,请稍后访问</h2>");

        }

        return $result;

    }

。。。

。。。

。。。

点击查看【执行SQL错误处理】

ログイン後にコピー

  测试

  可以在【App/Common/config.php】中配置日志文件目录。 如果不进行配置, 默认记录在App/log/目录中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

/**

 * 配置文件

 * User: young

 */

return [

    //数据库连接配置

    。。。

、 。。。

    。。。

    //日志文件位置配置

    &#39;log&#39; => APP,

];

点击查看【日志文件配置】

ログイン後にコピー

  以下测试可以 开启配置项中的配置log 和关闭后分别测试。 注意: 如果没有做配置log, 则要首先在App目录下建立一个log目录

   1. 在配置文件中故意写错数据库连接信息,如密码写错

   2. 执行sql错误

最后说明: 配置目录,日志目录都是不希望浏览器直接访问的,所以需要将.htaccess文件放入目录中 (由于App目录中已经存在,故也可以省略)

提交传送代码

1

2

3

4

git add -A

git commit -m "完成日志类"git checkout master

git merge start-admin-module

git push origin master

ログイン後にコピー

 小结: 本篇主要实现了 框架清理,博客数据库表搭建,创建配置读取类,日志记录类。

    实际上,到此仍然只是更加完善了一下框架结构,增加了2个功能。正如前篇所提,还有很多是可以改进的。这里就暂时不再继续增加功能了。

提出问题:

  1. 如何使用该自制框架搭建项目 ==> 用户操作+mvc实现

  2. 如何着手使用ajax实现后台登录功能  ==> ajax应用

3. 分類モジュール機能の実装方法、操作内容 ==> 追加、削除、変更、確認

次のステップ: バックエンドテンプレートビューの作成、バックエンドログイン、記事分類モジュール機能。

上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

MVC 構造マイクロフレームワークを実装するための php ソース コード

PHP7.2 データの使用構造

以上がPHPソースコードデータベース構築テーブル・設定ファイル・エラーログ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

See all articles