首先, 在本地服务器中新建项目APP,依据第一讲中的步骤配置好thinkphp,这里为了测试方便,不分前台和后台模块,统一把模块路径设为'./APP/'。
1、新建数据库myapp,以及数据库表think_form;
2、在配置文件APP/Conf/config.php中写入:
<?php
return array(
//'配置项'=>'配置值'
'DB_TYPE'   => 'mysql', // 数据库类型
'DB_HOST'   => '127.0.0.1', // 服务器地址
'DB_NAME'   => 'myapp', // 数据库名
'DB_USER'   => 'root', // 用户名
'DB_PWD'    => '', // 密码
'DB_PORT'   => '3306', // 端口
'DB_PREFIX' => 'think_', // 数据库表前缀
);
?>
其中端口为字符串需要加引号,之前把3306看成int数据类型,结果一直搞不定;
3、在控制器APP/Lib/IndexAction.class.php中写入:
<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    public function index(){
$m=new Model('Form');
$arr=$m->select();
var_dump($arr[0]['title']);
    }
}
?>
注:上面的语句具体解释为:$m=new Model(数据库表后缀名);后缀名首字母大小不限。注意只能是数据库表后缀名,不能是完整的数据库表名,否则读取数据失败,显示数据为null。也可以采用$m=M(数据库表后缀名);或者$m=D(数据库表后缀名);
最后,在浏览器中运行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到数据字段的数据。
再注:之前连接时在入口文件内没有加入define('APP_DEBUG', true);结果数据库始终读取失败,而加了之后忽然成功了,再次注释掉也可以读取。难道说这一道程序是必须的?搞不懂情况?反正thinkphp操作超蛋疼。
4、上面的操作基本可以读取数据库了,但对于MVC要把控制器C和视图V联系,还需要再加一道工序:
(1)在控制器APP/Lib/IndexAction.class.php中加入:
$this->assign('data',$arr[0]['title']);
$this->display();//此方法为在视图V中输出显示数据的必要条件。
(2)在APP/Tpl目录中新建Index目录(由于控制器中的类名为IndexAction ,此处必须为Index,如果要改成其他目录名,首先要把IndexAction类的Index改成其他字符串(首字母必须大写),文件名改为:目标字符串(如Str)+Action.class.php,如果要建立此控制器的视图,则要在Tpl目录下创建目录名为Str的目录,再在目录中创建文件),再在Index目录下新建index.html,写入HTML语句,加入{$data}变量(因为在控制器中通过assign方法为$data进行了定义和赋值,想分配变量可以使用assign方法)。
在浏览器中运行http://127.0.0.1/APP/index.php/Index/index,如果成功,即可看到数据字段的数据。
总之,thinkphp连接数据库超蛋疼!!记得加入define('APP_DEBUG', true);防止麻烦出现。
 
附1:
url的4种访问方式          //重点!
1.PATHINFO 模式 -- 重点!!!!!! http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2
2.普通模式
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2
3.REWRITE模式
http://域名/项目名/模块名/方法名/键1/值1/键2/值2
4.兼容模式
http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2

http://127.0.0.1/APP/index.php/Index/index为第一种。 
 
附2:
控制器数据库操作CURD命令:
增 -C Create $m->add()
删 -D Delete $m->delete()
改 -U Update $m->save()
查 -R Read   $m->select()
 
附3:
模型遍历数组方法:
控制器的语句:public function index(){
$m=new Model('Form'); //$m=new Model(数据库表后缀名);实例化模型
$arr=$m->select();
//var_dump($arr[0]['title']);
//$name='ken';
//$this->assign('data',$name);
$this->assign('data',$arr);
$this->display();
    }
视图V的语句:
<h1>
   <volist name='data' id='vo'>
{$vo.id}<br>
{$vo.title}<br>
   </volist>
   </h1>
<volist>标签是模型遍历数组的关键,属性name为控制器中接收过来的后台变量,id为前台输出的实例对象变量。

thinkphp学习简易教程(二) thinkphp连接读取MySQL数据库的更多相关文章

  1. thinkphp学习简易教程(一) thinkphp创建项目

    1.在本地服务器根目录下创建项目目录,如命名为app: 2.把thinkphp的压缩包解压到与项目同级目录下,如app是放在目录APP下面,即项目目录路径为'APP/app/',则thinkphp应解 ...

  2. Ocelot简易教程(七)之配置文件数据库存储插件源码解析

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9852711.html 上篇文章给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储 ...

  3. linux学习之centos(三):mysql数据库的安装和配置

    前言:mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库, ...

  4. 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据

    登录界面 <body><form action="login1.php" method="post"><div>用户名:&l ...

  5. Jmeter配置通过SSH连接的mysql数据库

    jmeter连接配置mysql数据库时,如果数据库服务器没有通过ssh连接,则只需要添加配置相应的jdbc参数就可以了.如果数据库服务器是通过SSH连接的,则需要通过中间远程连接工具来登录,此处使用的 ...

  6. jsp页面直接读取mysql数据库数据显示

    jsp页面直接读取mysql数据库数据显示: <%@page import="java.sql.ResultSet"%> <%@page import=" ...

  7. PHP连接局域网MYSQL数据库的简单实例

    PHP连接局域网MYSQL数据库的简单实例 [php] view plaincopy <?PHP /** * php连接mysql数据库 * by www.jbxue.com */ $conn= ...

  8. 连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的,

    连接远程MySQL数据库项目启动时,不报错但是卡住不继续启动的, 2018-03-12 17:08:52.532DEBUG[localhost-startStop-1]o.s.beans.factor ...

  9. 读取mysql数据库的数据,转为json格式

    # coding=utf-8 ''' Created on 2016-10-26 @author: Jennifer Project:读取mysql数据库的数据,转为json格式 ''' import ...

随机推荐

  1. 说说SQL Server 网络配置

    打开Sql Server Configuration Manager,里面显示了SQL Server的网络配置,这些到底表示什么含义呢? 图一:MSSQLSERVER的协议 这些配置选项,其实就是为了 ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (31) ------ 第六章 继承与建模高级应用之自引用关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-4  使用TPH建模自引用关系 问题 你有一张自引用的表,它代表数据库上不同类型 ...

  3. JVM系列-分代收集垃圾回收

    Java自动垃圾回收(Automatic Garbage Collection)是自动回收堆上不再使用的内存,new的对象在程序中没有引用指向它,就会被回收.回收的实现很多,有Reference Co ...

  4. 蓄水池(Reservoir_sampling)抽样算法简记

    摘要 1.适用场合 2.算法简介 3.代码例子 4.Spark RangePartitioner 中的应用(待补充) 内容 1.适用场合:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数 ...

  5. iOS----- Crash 分析(文三)- 符号化崩溃日志

    未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了.所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字.这一步我们称之为符号化. 在iOS Crash分析(文一)中已经提到过符号化的 ...

  6. PHP分布式中Redis实现Session

    方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务 session.save_handler = redis session.save_path = "tcp://127.0 ...

  7. Leetcode-463 Island Perimeter

    #463. Island Perimeter You are given a map in form of a two-dimensional integer grid where 1 represe ...

  8. ECMAScript6学习笔记 ——let、const、变量解构赋值

    let 不存在变量提升 通过let声明的变量仅在块级作用域内有效 不允许在同一个作用域内重复声明一个变量 防止值公用 var oUl = document.querySelectorAll('ul&g ...

  9. JavaScript 开发技巧 || 返回有效值

    <script type="text/javascript">var objOne = undefined || "" || null || 1 | ...

  10. 深入学习jQuery事件绑定

    × 目录 [1]bind [2]trigger [3]delegate[4]on[5]one 前面的话 javascript有HTML.DOM0级.DOM2级和IE这四种事件处理程序,而jQuery对 ...