ThinkPHP学习(二)官方文档的一个数据增查小示例

本文介绍如何使用ThinkPHP框架实现简单的数据增删改功能。通过配置数据库连接参数,编写模型类的方法来创建数据对象并将其写入数据库。同时展示了如何查询数据库并在网页上显示。

在官方文档上,有一个数据增查的小示例,为了增加了解有必要敲敲这个示例。

 

       接着上例的现有的工程,先修改下conf目录的config.php:

 

<?php    

 

  return array(   

 

     'APP_DEBUG' => true, // 开启调试模式   

 

    'DB_TYPE'=> 'mysql',   // 数据库类型   

 

    'DB_HOST'=> 'localhost'// 数据库服务器地址   

 

    'DB_NAME'=>'demo',  // 数据库名称   

 

    'DB_USER'=>'root'// 数据库用户名   

 

    'DB_PWD'=>''// 数据库密码   

 

    'DB_PORT'=>'3306'// 数据库端口   

 

    'DB_PREFIX'=>'think_'// 数据表前缀   

 

  );?>   

 

 

       第二步修改lib--》ACTION--》IndexAction.class.php 代码如下:

 

     <?php

 


    // 本类由系统自动生成,仅供测试用途
    class IndexAction extends Action{

 

 

 

     public function insert() {

 

        $Demo = new Model('Demo');   // 实例化模型类  

 

        $Demo->Create(); // 创建数据对象  

 

        $result = $Demo->add(); // 写入数据库  

 

        $this->redirect('index'); // 成功后重定向到index操作页面  

 

       }

 


     public function index() {

 

 

 

        $Demo = new Model('Demo'); // 实例化模型类  

 

        $list = $Demo->select(); // 查询数据  

 

        $this->assign('list',$list); // 模板变量赋值  

 

        $this->display(); // 输出模板   


  

       }

 


    }


  ?>

 

 

 

第三步,新建一个模板文件,Tpl--》default--》新建(大写I)Index文件夹--》新建index.html,代码如下

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>


  <head>


  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


  <title>示例</title>


  </head>


  <body>


    <form method="post"  action="__URL__/insert" > 

 

     标题:<input type="text" name="title"><br /> 

 

     内容:<textarea name="content" rows="5" cols="25"></textarea><br/> 

 

     <input type="submit" value="新增数据"/> 

 

    </form>   


     <volist name='list' id='vo'>


          编号:{$vo.id}<br/>


          标题:{$vo.title}<br/>


          内容:{$vo.content}<hr></hr>


     </volist>


  </body>


</html>

 

注意:action="__URL__/insert" 下划线是双——

 

 运行效果如下:

 

    

  

<think>好的,我现在需要回答用户关于在ThinkPHP 5.1中编写原生SQL查询示例的问题。首先,我要确保自己正确理解用户的需求。用户希望看到具体的示例,可能包括如何执行查询以及参数绑定的方法。 首先,我应该回顾一下ThinkPHP 5.1的文档,特别是关于数据库操作的部分。根据之前的引用内容,引用[2]提到了原生查询支持参数绑定,包括问号占位符和命名占位符。例如,Db::query用于执行查询操作,而Db::execute用于写操作如插入、更新和删除。 接下来,我需要组织回答的结构。用户可能需要分步骤的示例,包括基本查询、参数绑定的两种方式、事务处理以及获取自ID的方法。这些内容应该清晰明了,每个部分都给出代码示例,并解释其作用。 然后,要注意用户提到的使用中文回答,并且所有行内数学表达式需要用$...$格式,但在这个问题中可能用不上数学表达式,所以主要关注代码示例的正确性和格式。确保代码部分使用正确的语法,比如使用三个反引号包裹代码块,并标注语言为php。 另外,用户要求生成相关问题,我需要根据回答内容提出几个相关问题,例如参数绑定的必要性、如何获取自ID、事务处理的方法以及防止SQL注入的措施。 还要注意引用来源的标注,例如在提到参数绑定时引用[2],在讨论自ID时引用[4]。确保每个引用都自然出现在相关段落的末尾。 现在需要检查是否有遗漏的部分,比如是否覆盖了用户可能需要的所有常见原生查询场景,比如查询、更新、事务等。同时,要确保示例代码正确无误,符合ThinkPHP 5.1的语法,例如正确使用Db类的方法。 最后,验证所有引用是否准确对应,比如引用[2]确实讨论了参数绑定的示例,引用[4]关于LAST_INSERT_ID的内容是否适用于获取自ID的情况。确保回答真实可靠,并且结构清晰,步骤分明,便于用户理解和应用。</think>在ThinkPHP 5.1中进行原生SQL查询主要通过`Db`类的`query`和`execute`方法实现,以下是具体使用场景和示例: --- ### 一、基本查询操作 1. **查询操作(SELECT)** 使用`Db::query()`执行返回数据集的操作: ```php $result = Db::query("SELECT * FROM think_user WHERE status=1 AND id>100"); ``` 2. **写入操作(INSERT/UPDATE/DELETE)** 使用`Db::execute()`执行影响记录数的操作: ```php $count = Db::execute("UPDATE think_user SET name='张三' WHERE id=5"); ``` --- ### 、参数绑定(防止SQL注入) ThinkPHP支持**问号占位符**和**命名占位符**两种方式[^2]: 1. **问号占位符示例** ```php Db::query("SELECT * FROM think_user WHERE id=? AND status=?", [8, 1]); ``` 2. **命名占位符示例** ```php Db::execute( "UPDATE think_user SET name=:name WHERE status=:status", ['name' => 'thinkphp', 'status' => 1] ); ``` --- ### 三、事务处理 通过`startTrans`/`commit`/`rollback`实现事务: ```php Db::startTrans(); try { Db::execute("UPDATE account SET balance=balance-100 WHERE id=1"); Db::execute("UPDATE account SET balance=balance+100 WHERE id=2"); Db::commit(); } catch (\Exception $e) { Db::rollback(); } ``` --- ### 四、获取自ID(LAST_INSERT_ID) 在执行INSERT操作后,可通过MySQL函数直接获取: ```php Db::execute("INSERT INTO think_user (name) VALUES ('李四')"); $userId = Db::query("SELECT LAST_INSERT_ID()")[0]['LAST_INSERT_ID()']; ``` 该方法保证连接级别的ID准确性,不受其他客户端影响[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值