php连接数据库的操作

今天主要学习了thinkPHP中对数据库连接的一些操作 首先是配置文件的书写
在项目的conf 下的config.php中配置数据库的一些参数

<?php
return array(
    //'配置项'=>'配置值'
//数据库的配置
    'DB_TYPE'               => 'mysql',     // 数据库类型
    'DB_HOST'               => 'localhost', // 服务器地址
    'DB_NAME'               => 'f1',          // 数据库名
    'DB_USER'               => 'root',      // 用户名
    'DB_PWD'                => '',          // 密码
    'DB_PORT'               => '3306',        // 端口
    'DB_PREFIX'            => "",
//数据库的主从读写分离
//"DB_RW_SEPARATE" => true,
//多个主数据库服务器
//"DB_MASTER_NUM" => "2",
);
?>

随后是几种数据模型的使用 实际上就是indexAction中方法的书写
首先是实例化基础模型model

    $user = new Model("stu");//表名 表前缀 数据库的链接信息

在这里因为表前缀和数据库的连接信息已经在配置文件中写好,因此可以忽略
随后进行查询 进行dump化的输出即可

$data = $user->select();
dump($data);

同时可以用M方法来进行简写

$user = M("stu");
    $data = $user->select();
    dump($data);

第二种是实例化用户自定义的模型
顾名思义要创建属于用户自己的类型
在model 下创建类型 注意命名规则 以表名加model.class.php命名

1.PNG

随后是自定义类的书写 继承自model 类 来自定义函数

<?php
class StuModel extends Model{
    public function getInfo(){
        //添加自己的业务逻辑
        return 'hello world';
    }
}

最后是实例化自定义的类

//实例化用户自定义模型
    $user1 = new StuModel();
    echo $user1->getInfo();

也可以用D方法来实例化用户自定义类型 这个D方法如果系统未找到这个类 也就是命名非常的重要 他就会自动使用M方法 来实例化基础模型 此时也可以进行dump的输出

  //可以用D方法 没有找到自定义的模型可以去找M模型
  $user2 = D("Stu");
  echo $user2 -> getInfo();
  $data2 = $user -> select();
  dump($data2);

第三种是实例化公共模型 注意文件的命名 是CommonModel.class.php
在这个类中进行书写 可以定义一些项目中常用的函数等

<?php
class CommonModel extends Model{
  public function strmake($str) {
      return md5($str);
  }
}

可以用实例化new 进行调用

//实例化公共模型
    $user3 = new CommonModel();
    echo $user3->strmake("cccccc");

同时若用户自定义的模型继承自common的话 可以用D方法进行实例化的调用 并且也可以调用公共类型的方法

$user4 = D("stu");
    echo $user4 -> strmake("ccsss");

最后一种是实例化空模型 可以做两件事情 一种是query 执行查找等sql DML语句 还有一种是exucute语句 执行更新 删除等DDL语句
excute可以输出受影响的有几条记录 query语句可以输出 查找到的记录 随后dump输出即可

//实例化空模型
    $model = M();
    //可以做两件事情
$data3 = $model -> query("select * from stu");//负责读取 select 
dump($data3);   
$sql = "insert into stu (id firstname,lastname,email) values (555, 'Kevin','cao','ssss')";
$sqll = "update stu set firstname = 'Levin' where id = 1";
$num = $model -> execute($sql);   //负责update insert等
echo $num;

随后是数据库的插入add
用M方法进行数据库的插入 个人认为就是控模型的插入
用add来插入一条记录 用addAll 来插入多条记录

 $data1 = array(
     "age" => 3,
     );
        $data = array(
        
        0 => array ("age" => 22,),
        1 => array ("age" => 23,),
        2 => array ("age" => 24,),
        
        );
        //用all的方法
        echo M("user") -> add($data1);
        echo M("user")->addAll($data);

这里输出的第一个插入的记录的主键,随后若想debug 可以输出最后一条执行的sql语句

 echo M() -> getLastSql();

查询语句where的几种书写
可以直接用M模型的select 语句

  $data3 = M('user') ->select();
        dump($data3);

或者用where条件中的加上字符串

   $data3 = M("user")->where("age = 24") -> select();
      // dump($data3);

可以用数组的方式 键是字段名 值是字段值

  //使用数组的方式进行查询
       $where["age"] = 222;
       //随后进行赋值
       $data3 = M("user") ->where($where) -> select();
        dump($data3);

用数组进行多个条件的合并时 默认使用的and 所以可以改变逻辑值

//改变逻辑值
        $where["_logic"] = "or";

有时候我们需要的是字段值大于哪个值 并且小于哪个值
可以用如下方法

//表达式的查询 eq neq egt gt lt elt between in notin
//$where["字段名"] = array(表达式 ,查询条件)

  $where["age"] = array("gt",23);
         $data3 = M("user") ->where($where) -> select();

同时 这个也可用于like的字符串匹配和between语句的使用 要注意此时的between的value值用,隔开区间

  $where["age"] = array("between","21,25");
           $data3 = M("user") ->where($where) -> select();

可以在where数组中添加字符串 建议不要和数组混合使用

/可以加个字符串
//$where["_string"] = "score > 10";

有时我们需要满足一个字段的值大于某个值 并且小于某个值 可以用数组嵌套数组的方法

  $where["id"] = array(array("gt",23),array("lt",33),"or");
          $data3 = M("user") ->where($where) -> select();

我们经常要做统计的事情 要记住max min sum avg都要加字段名 统计的是哪一个字段

echo  M("user") -> count();
 echo M("user") -> max("age");
  echo M("user") -> avg("age");
 echo M("user") -> sum("age");

更新的操作 要记住 用的是save 而不是update

$update["age"] = 33;
 $where["age"] = 10;
echo M("user") -> where($where) -> save($update);

删除信息
要记住放在delete里面的只能是主键

 echo M("user") -> where($where) -> delete(33);

这里返回的都是受影响的第一个字段的主键
还有在mysqlWorkBench中 默认是不能进行更新和删除的 因此要添加如下语句

set sql_safe_updates = 0

这样便可以在mysql workbench中进行更新和删除
个人认为sql语句记住的话,就可以用M模型的query或者excute来进行数据库的操作

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容