think PHP连接数据库连接问题问题

一、连接数据库配置及Model数据模型层
1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容
& & JiaoWu\Home\conf\config.php:
2. 制作model模型
a) &model本身就是一个类文件
b) &数据库中的每个数据表都对应一个model模型文件
c) &最简单的数据model模型类
在Home\Model文件夹中新建一个模型文件:InfoModel.class.php
namespace Home\M
use Think\M
class InfoModel extends Model
3. 实例化Model的三种方式:
$goods =& new& 命名空间GoodsModel();&
$goods = D(&模型标志&);&&&
a)&&&$goods = D(&Goods&);
b) & 该$goods是父类Model的对象,但是操作的数据表还是sw_goods
c) & $obj = D();& 实例化Model对象,没有具体操作数据表,与M()方法效果一致
$obj = M();
a) & 实例化父类Model
b) & 可以直接调用父类Model里边的属性,获得数据库相关操作
c) & 自定义model就是一个空壳,没有必要实例化自定义model
d) &$obj = M(&数据表标志&);& 实例化Model对象,实际操作具体的数据表
  $obj = D(标志);
  $obj = D();
  $obj = M(标志);
  $obj = M();
D()和M()方法的区别:
  1.&前者是tp3.1.3里边对new操作的简化方法;&
  2.&后者在使用就是实例化Model父类
& & & 3. 两者都在函数库文件定义ThinkPHP/Common/functions.php&
注意:如果没有对应的model模型文件类,也可以直接实例化model对象进行操作
   &&D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。
function ShowAll()
//Model:数据库中每张表对应一个模型
//类名是表名,类里面的成员变量是列名
//把一张表对应为一个类,其中一条数据对应一个对象
//如果我们对该表的模型没有特殊操作的话可以不用建立该模型
//1.实例化model类
$info=new \Home\Model\InfoModel();
//var_dump($info);
//2.使用D()方法
$info = D("Info");
//var_dump($info);
//3.使用M()方法
$car=M("Car");
//var_dump($car);
二、数据查询
select()是数据模型的一个指定方法,可以获得数据表的数据信息
&&&&&& 返回一个二维数组信息,当前数据表的全部数据信息
$obj = D();& 创建对象
查询常使用的方法:
$obj -& select();& 查询数据,使用select()会返回一个二维数组
$obj -& field(字段,字段);& 查询指定字段
$obj -& table(数据表);&& 设置具体操作数据表
$obj -& where(参数);&& 参数就是正常sql语句where后边的条件信息
    例如:( &goods_price &100 and& goods_name like &三%&&)
$obj -& group(字段);& 根据字段进行分组查询
$obj -& having(参数条件);& having 条件设置
$obj -& order(&price& desc/asc&)& 排序查询
$obj -& limit([偏移量,]条数)& 限制查询的条数
$obj -& page() &&分页类Page可以自动计算出每个分页的limit参数
    例如:$obj-&page("1,10")-&select(); // 查询第一页数据
       $obj-&page("2,10")-&select(); // 查询第二页数据
$obj -&find():如果我们查询的结果只有一个信息,为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法
相关聚合函数: count()& sum()&& avg()&& max()&& min()
&&&&&& 以上聚合函数是最后被调用的方法
&&&&&& 以上方法可以结合具体条件方法使用
&&&&&& 例如:$goods -& where(&goods_price &1000&)-&count(); 大于1000元的商品的总数目
//汽车表Car
$car=M("Car");
var_dump($info-&select());//返回所有数据的二维数组
//使用TP框架时,建表是表名和列名最好都用小写
$attr=$car-&where("brand='b002'")-&select();//where方法可以添加查询条件
$attr=$car-&table("Nation")-&select();//table方法可以切换操作表
$attr=$car-&field("name,code")-&select();//指定查询的字段
$attr=$car-&order("oil desc")-&select();//排序
$attr=$car-&limit(2,2)-&select();//分页查询,如果是一个参数是取前n个数据,两个数据是跳过几个取几个
$attr=$car-&page(3,2)-&select();//分页查询,可以取第几页的n条数据
$attr=$car-&field("brand,count(*)")-&group("brand")-&select();//分组查询
$attr=$car-&join("brand on car.brand=brand.brand_code")-&select();//连接查询
$attr=$car-&distinct(true)-&field("brand")-&select();//distinct(true)去重
$attr=$car-&find("c001");//查一条数据,只根据主键值查,返回一维数组,不写主键值默认返回第一条
$attr=$car-&select();//根据主键值查多条数据,返回二位数组,
$attr=$car-&where("name like '%奥迪%'")-&order("powers desc")-&select();
//var_dump($attr);
//聚合函数:可以放在最后
$attr=$car-&count();
$attr = $car-&avg("Price");
echo $attr;
自己拿Info表做的练习:
1 //info表
$info=M("Info");
var_dump($info);
$attr=$info-&select();
$attr=$info-&where("nation='n001'")-&select();
$attr=$info-&table("Nation")-&select();
$attr=$info-&field("sex,birthday")-&select();
$attr=$info-&order("birthday")-&select();
$attr=$info-&field("nation,count(*)")-&group("nation")-&select();
$attr=$info-&limit(1,2)-&select();
$attr=$info-&page(2,3)-&select();
$attr=$info-&join("nation on Info.Nation=Nation.Code")-&select();
$attr=$info-&distinct(true)-&field("birthday")-&select();
$attr=$info-&find("p010");
$attr=$info-&select("p010,p120");
var_dump($attr);
如何在页面显示查询出的表格内容:
1. 在MainController.class.php控制器中写一个方法,实例化model,查询info表内容,然后注册到前端
function ShowAll()
$info=M("Info");
$attr=$info-&select();
$this-&assign("shuju",$attr);
$this-&display();
2.在View\Main中新建:ShowAll.html
1 &!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
2 &html xmlns="http://www.w3.org/1999/xhtml"&
4 &meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
5 &title&无标题文档&/title&
9 &h1&信息查询&/h1&
10 &table width="100%" cellpadding="0" cellspacing="0" border="1"&
12 &td&代号&/td&
13 &td&姓名&/td&
14 &td&性别&/td&
15 &td&民族&/td&
16 &td&生日&/td&
19 &foreach name="shuju" item="v"&
21 &td&&{$v.code}&&/td&
22 &td&&{$v.name}&&/td&
23 &td&&{$v.sex}&&/td&
24 &td&&{$v.nation}&&/td&
25 &td&&{$v.birthday}&&/td&
27 &/foreach&
28 &/table&
29 &/body&
30 &/html&
3.运行结果:
三、数据添加
add() 该方法返回被添加的新记录的主键id值
三种方式实现数据添加
  1.&数组方式数据添加
  $goods = D(&Goods&);
  $arr = array(&goods_name&=&&iphone5s&,&goods_weight&=&&109&);
  //注意:goods_name和goods_weight是数据表中字段名称
  $goods -& add($arr);
function Add()
//1.数组添加数据
//要添加的数组,必须是关联数组,key必须为字段名称
//方式一:
$model=D("Info");
$attr=array(
"Code"=&"p100",
"Name"=&"ww",
"Sex"=&true,
"Nation"=&"n001",
"Birthday"=&""
//方式二:
$attr["Code"]="p111";
$attr["Name"]="小豪";
$attr["Sex"]=false;
$attr["Nation"]="n003";
$attr["Birthday"]="";
$model-&add($attr);//添加数据的方法。需要参数,该参数是关联数组  }
  2. &AR方式实现数据添加
  a)&&&&&&&& ActiveRecord& 活跃记录
  b)&&&&&&& AR规定了程序与数据库之间的关系
  c)&&&&&&&& 什么是AR:
  d)&&&&&&& ① 一个数据表对应一个类model
  e)&&&&&&&& ② 一条数据记录对应类的一个对象
  f)&&&&&&&& ③ 每个字段对应该对象的具体属性
  g)&&&&&&& tp框架的AR是假的
  $goods = D(&Goods&);
  $goods -& goods_name = &htc_one&;
  $goods -& goods_price = 3000;
  $goods -& add();
以上两种方式:数组、AR,最后add都要把新记录的主键id值返回
function Add()
//2.AR方式实现数据添加(对象方式)
//1.连接类
3.数据访问类
$model=D("Info");
$model-&Code="p120";
$model-&Name="yuyu";
$model-&Sex=true;
$model-&Nation="n004";
$model-&Birthday="";
$model-&add();
  3.&收集表单数据入库操作
制作一个表单
通过$_POST收集信息
通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤
注意:一个add控制器实现两个逻辑,一个是打出添加页面,一个是向数据库添加内容
通过一个例子来说明:
1. 在MainController.class.php控制器中写一个方法来接收并向数据库添加数据
function All()
if(empty($_POST))
$nation=M("nation");
$attr=$nation-&select();
$this-&assign("shuju",$attr);
$this-&display();
$model=D("Info");
$model-&create();//自动收集表单数据入库
$model-&Sex=$_POST["Sex"]=="1"?true:false;
$r=$model-&add();
//添加成功跳转页面
$this-&success("添加数据成功!","Add",5);//5代表跳转时间,默认是3秒
//添加失败跳转页面
$this-&error("添加数据失败!","Add",5);
2.在View\Main中新建:ShowAll.html&
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&title&无标题文档&/title&
&!--自动收集表单数据入库操作 --&
&!--注意大小写和数据库中的列名一致 --&
&h2&添加数据&/h2&
&form action="__ACTION__" method="post"&
&div&代号:&input type="text" name="Code" /&&/div&
&div&姓名:&input type="text" name="Name" /&&/div&
&div&性别:&input type="radio" name="Sex" value="1" /&男
&input type="radio" name="Sex" value="0" /&女
&div&民族:
&select name="Nation"&
&foreach name="shuju" item="v"&
&option value="&{$v.code}&"&&{$v.name}&&/option&
&/foreach&
&div&生日:&input type="text" name="Birthday" /&&/div&
&input type="submit" value="提交" /&
3.运行结果:
若添加成功:
& & &==& & & && &&==&
若添加不成功:
& & &&==& & & &&
注意:如果是主键值重复,这种错误会导致error()方法不跳转页面直接抛出错误信息,这是新版本问题,如果想要跳转,找到
阅读(...) 评论()无法加载数据库驱动: Think\Db\Driver\ - ThinkPHP框架
下面是数据库信息:
// mysql全局定义
'DB_TYPE'
'mysql',
'DB_HOST'
'localhost',
'DB_USER'
'root',
'DB_PWD'
'',
'DB_NAME'
'think',
'DB_PORT'
'DB_PREFIX' =&
'think_',
在浏览器中报错,如下:(哪位大师帮忙看看呀)
无法加载数据库驱动: Think\Db\Driver\
FILE: F:\web\project\Think\Library\Think\Db.class.php  LINE: 42
#0 F:\web\project\Think\Library\Think\Db.class.php(42): E('\xE6\x97\xA0\xE6\xB3\x95\xE5\x8A\xA0\xE8\xBD\xBD\xE6\x95\xB0...')
#1 F:\web\project\Think\Library\Think\Model.class.php(1423): Think\Db::getInstance('')
#2 F:\web\project\Think\Library\Think\Model.class.php(97): Think\Model-&db(0, '', true)
#3 F:\web\project\Weibo\Home\Controller\UserController.class.php(21): Think\Model-&__construct()
#4 [internal function]: Home\Controller\UserController-&model()
#5 F:\web\project\Think\Library\Think\App.class.php(164): ReflectionMethod-&invoke(object(Home\Controller\UserController))
#6 F:\web\project\Think\Library\Think\App.class.php(202): Think\App::exec()
#7 F:\web\project\Think\Library\Think\Think.class.php(120): Think\App::run()
#8 F:\web\project\Think\ThinkPHP.php(97): Think\Think::start()
#9 F:\web\project\index.php(24): require('F:\\web\\project\\...')
#10 {main}
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 解决数据库乱码问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信