首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Yii数据库操作方法指南

'; $command->text=$newSQL; // CDbCommand对象有两个方法execute()用于非查询SQL执行,而query(),通俗的讲就是用于SELECT查询 // execute...()返回的是INSERT, UPDATE and DELETE操作受影响的记录行数 // query()返回一个CDbDataReader对象,使用CDbDataReader对象可以遍历匹配结果集中的所有记录...bindColumn(1, $username);  //第一列值绑定到$username $dataReader->bindColumn(2, $email);     //第二列值绑定到$email //接着循环读取并操作数据...} // 设置表前缀,使用 CDbConnection::tablePrefix 属性在配置文件中设置 //  // Yii实现了把一条完整的SQL语句完完全全肢解的能力,比如这样: $user =...// 如果关系查询执行后没有匹配的结果,返回将会是NULL或空的数组。 2).eager loading approach   热心的关系查询 //这名字真的很萌!

1.5K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从PHP代码的细节说起

    我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一个从数据库中读取的列表数组中找出某个值是最大的一条记录, 并且把这个最大的值和跟这个值相关的时间给取出来。...第二个比较复杂 ,是将这个列表数组中的值映射到另外一个列表数组中, 可以把这个过程看作是SQL中的JOIN操作, 只是JOIN的条件异常复杂 ,在这里我也不详述了,阅读的同学也不必去深入探究。...整段代码的逻辑大致如下 1.定义result数组, 用来存放结果 2.循环数组, 对每一个数据项进行条件判断, 查看其中的性别字段是否为女 3.如符合条件则放入result数组中 这是原汁原味的命令式程序代码...换言之, select 语句只是将SQL的查询结果以一定的方式(选字段、计算值等等)提取出来了。 php中的array_map表达的也是这层意思, “映射”与“投影”完全是一种意思的不同表达。...看起来, 好像array_walk的实现方式更加复杂, 但是在更深层次的语义方面 foreach表达的是循环遍历, 但是在这个循环的过程中,要做什么样的处理,是没有任何约束的, 删除被遍历的数组的某一项

    1.4K70

    PHP 应用PDO技术操作数据库

    > 逐条读取数据: 通过循环的方式逐条读取数据,并将数据根据HTML格式输出到屏幕,注意用完后释放,否则会非常占用内存. 通过对象返回结果集: 该方法与前面三个不同,他将以一个对象的形式返回一条结果记录,而不是数组,它的每个字段都需要以对象的方式进行访问,数据列的名称区分字母大小写. 预处理语句查询: 使用预处理执行SQL时,拿到的执行结果并不是一个数组,我们需要自己将这些结果集绑定到指定的变量上,然后再通过遍历变量的方式获取到结果集中的所有数据. 如果在SELECT查询语句上也使用占位符去查询,并需要多次执行这一条语句时,也可以将mysqli_stmt对象中的bind_param()和bind_result()方法结合起来. PDO 获取表中数据: 当执行查询语句时我们可以使用PDO中的Query()方法,该方法执行后返回受影响的行总数,也可以使用Fetch等语句,下面是三者的查询方式. <?

    3.4K20

    网站渗透攻防Web篇之SQL注入攻击初级篇

    构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。开发人员可以使用动态SQL来创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。...当开发人员在运行过程中需要根据不同的查询标准来决定提取什么字段(如SELECT语句),或者根据不同的条件来选择不同的查询表时,动态构造SQL语句会非常有用。...在PHP中动态构造SQL语句字符串: 看上面代码我们可以控制输入参数ichunqiu,修改所要执行SQL语句,达到攻击的目的。...第五步:执行完查询,我们再对结果进行处理 mysql_fetch_array(data,array_type) data        可选。规定要使用的数据指针。...sql语句最终变为 执行失败,所以mysql_query()函数会返回一个布尔值,在下行代码中mysql_fetch_array($sql)将执行失败,并且PHP会显示一条警告信息,告诉我们mysql_fetch_array

    1.3K40

    真正干活的是谁?

    如下图所示,红框之内的四个方法就是抽象方法: doFlushStatements():刷新Statement对象 doQuery():执行查询语句并返回List doQueryCursor():执行查询语句并返回...内,需要注意的是它只会和前一个进行比对,也就是说假如你有相同模式的2条sql,但是你中间先执行了一条其他sql,那么就会产生3个Statement对象,从而无法共用了。...当参数为List时,默认"list",参数为数组时,默认"array"。...然后执行之后输出sql如下: 可以看到,这两条语句就是相同模式的sql,只是参数不同,所以直接执行一次。...模型,理论上应该执行2次,但是我们根据源码知道,因为insert语句中间被insert10隔开了,所以实际上sql-1也是不能复用的,也就是会执行3次: PS:这三种批量执行的效率有兴趣的可以自己去测试一下

    43041

    WordPress 6.1 将提高 WP_Query 查询性能,真正实现站点 0 SQL

    WP_Query 是 WordPress 中最重要的 class,几乎每个页面都是用它来获取文章,但是它最大的问题是,对文章进行查询的时候是直接到数据库查询的,结果没有被缓存起来,所以真正实现站点的 0SQL...WP_Query 实现数据库查询缓存 WordPress 6.1 改进了 WP_Query 类中数据库查询的执行方式,实现 SQL 查询缓存,这意味着如果多次运行同一条 SQL 查询,查询结果将从缓存中加载...,生成的 SQL语句都是一样的,然后查询结果都会被缓存起来,这样就能够更加高效的使用缓存,而无需存储多份缓存数据。...,通过在循环开始时调用该函数通过一次数据库查询就初始化所有用户(作者)缓存,而不是逐个加载每个用户,从而减少数据库查询。...初始化菜单中的所有链接对象 WordPress 6.1 还新增了函数 update_menu_item_cache,它支持一个 post 的对象数组参数,然后就会初始化菜单中引用到的文章或者分类的数据缓存

    69620

    HAWQ技术解析(十) —— 过程语言

    HAWQ我所使用过的SQL-on-Hadoop解决方案中唯一支持过程化编程的,Hive、SparkSQL、Impala都没有此功能。...所有非returns void函数的最后一句SQL必须是返回指定类型的select语句,函数返回最后一条查询语句的结果,可以是单行或多行结果集。下面是SQL函数的几个例子。...函数返回最后一条查询语句的结果,即parent_id=-1的记录数,调用结果如图2所示。 ?...当这种函数用于查询中时,必须由查询本身指定返回的行结构。下面的例子使用动态SQL,返回结果集依赖于作为入参的查询语句。...同样,每个声明为anyarray的位置允许是任何实际的数组数据类型,但是在任何一次给定的调用中,anyarray也必须具有相同类型。

    4.2K50

    十个 PHP 开发者最容易犯的错误

    这篇文章列出了十个最容易出错的地方,值得我们去注意。 易犯错误 #1: 在 foreach 循环后留下数组的引用 还不清楚 PHP 中 foreach 遍历的工作原理?...如果你在想遍历数组时操作数组中每个元素,在 foreach 循环中使用引用会十分方便,例如 $arr = array(1, 2, 3, 4); foreach ($arr as &$value)...常见的错误 #4:在循环中执行查询 如果像这样的话,一定不难见到你的 PHP 无法正常工作。...$inputValue); 结果每轮循环都会产生一次对数据库的查询。 因此,假如你为这个循环提供了一个包含 1000 个值的数组,它会对资源产生 1000 单独的请求!...一个我们平时常常能见到查询效率低下的地方 (例如:在循环中)是使用一个数组中的值 (比如说很多的 ID )向表发起请求。

    3K90

    易犯错误 | 十个 PHP 开发者最容易犯的错误

    这篇文章列出了十个最容易出错的地方,值得我们去注意。 易犯错误 #1: 在 foreach循环后留下数组的引用 还不清楚 PHP 中 foreach 遍历的工作原理?...如果你在想遍历数组时操作数组中每个元素,在 foreach 循环中使用引用会十分方便,例如 $arr = array(1, 2, 3, 4); foreach ($arr as &$value)...常见的错误 #4:在循环中执行查询 如果像这样的话,一定不难见到你的 PHP 无法正常工作。...$inputValue); 结果每轮循环都会产生一次对数据库的查询。因此,假如你为这个循环提供了一个包含 1000 个值的数组,它会对资源产生 1000 单独的请求!...检索每一个 ID 的所有的数据,代码将会迭代这个数组,每个 ID 进行一次SQL查询请求,它看起来常常是这样: $data = []; foreach ($ids as $id) { $

    4.5K20

    Web Hacking 101 中文版 十一、SQL 注入

    十一、SQL 注入 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 SQL 注入,或者 SQLi 允许黑客将 SQL 语句注入到目标中并访问它们的数据库...现在结果是,Stefan 发现了 Drupal 包装器代码对传给 SQL 查询的数组数据做了一个错误的假设。...在 PHP 中,当你将数组声明为array('value','value2',value3'),它实际上创建了[0 =>'value',1=>'value2',2=>'value3'],其中每个值都可以通过数字键来访问...基于上面描述的foreach,Drupal 会遍历数组中的每个元素。所以,对于第一个迭代i = test) –以及value = user1。...所以,攻击者能够传递恶意输入,例如实际的 SQL 查询来为任何的数组键创建管理员用户,它作为多重查询解释和执行。 重要结论 SQLi 似乎更难于发现,至少基于为了这本书搜索的报告。

    1.7K20

    十个 PHP 开发者最容易犯的错误

    这篇文章列出了十个最容易出错的地方,值得我们去注意。 易犯错误 #1: 在 foreach 循环后留下数组的引用 还不清楚 PHP 中 foreach 遍历的工作原理?...如果你在想遍历数组时操作数组中每个元素,在 foreach 循环中使用引用会十分方便,例如 $arr = array(1, 2, 3, 4); foreach ($arr as &$value)...常见的错误 #4:在循环中执行查询 如果像这样的话,一定不难见到你的 PHP 无法正常工作。...$inputValue); 结果每轮循环都会产生一次对数据库的查询。 因此,假如你为这个循环提供了一个包含 1000 个值的数组,它会对资源产生 1000 单独的请求!...一个我们平时常常能见到查询效率低下的地方 (例如:在循环中)是使用一个数组中的值 (比如说很多的 ID )向表发起请求。

    2.6K50

    跟我一起学mybatis(2)

    的id相同 3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同 4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个...动态代理实现类对象在执行方法的时候最终调用了 mapperMethod.execute() 方法,这个方法中通过 switch 语句根据操作类型来判断是新增、修改、删除、查询操作,最后一步回到了 MyBatis...2.2 动态 SQL 之 我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。... 查询条件拼接 2.3 动态 SQL 之 循环执行sql的拼接操作,例如:SELECT * FROM student WHERE id IN...2.4 SQL片段抽取 Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的 <!

    40520

    动态SQL!牛逼!

    ,就需要发送所有的字段给持久化对象,这种想更新的每一条数据都要将其所有的属性都更新一遍的方法,其执行效率是非常差的。...一条一条的查询 :那如果要查询1000条数据呢,岂不是很累? 在Java中用for循环查询 :考虑过N条查询语句时的查询效率了吗?...collection:配置的list是传递过来的参数类型(首字母小写),它可以是一个array、list(或collection)、Map集合的键、POJO包装类中数组或集合类型的属性名等。...如果传入的参数是POJO包装类的时候,collection属性值就为该包装类中需要进行遍历的数组或集合的属性名。 7. 元素 在入门案例中模糊查询的SQL语句中?...小提示:这样,映射文件中的SQL就要根据不同的情况提供不同形式的实现,这显然是比较麻烦的,且不利于项目的移植。为了减少这种麻烦,就可以使用MyBatis的元素来解决这一问题。

    55220

    PHP 快速入门

    > 二维数组遍历回显: 通过传统的循环结构遍历特定数组中的元素,并用表格展示出来. 拆分/合并/分解数组: 数组常用的处理函数,包括对数组进行拆分,合并,结合,等常用操作. <?php // array_slice(数组,开始下标,取出个数) 在数组中根据条件取值并返回....> 通过对象返回结果集: 该方法与前面三个不同,他将以一个对象的形式返回一条结果记录,而不是数组,它的每个字段都需要以对象的方式进行访问,数据列的名称区分字母大小写. 预处理语句查询: 使用预处理执行SQL时,拿到的执行结果并不是一个数组,我们需要自己将这些结果集绑定到指定的变量上,然后再通过遍历变量的方式获取到结果集中的所有数据. 如果在SELECT查询语句上也使用占位符去查询,并需要多次执行这一条语句时,也可以将mysqli_stmt对象中的bind_param()和bind_result()方法结合起来. <?

    2.7K10

    PHP 开发基础知识笔记

    > 二维数组遍历回显: 通过传统的循环结构遍历特定数组中的元素,并用表格展示出来. 拆分/合并/分解数组: 数组常用的处理函数,包括对数组进行拆分,合并,结合,等常用操作. <?php // array_slice(数组,开始下标,取出个数) 在数组中根据条件取值并返回....> 通过对象返回结果集: 该方法与前面三个不同,他将以一个对象的形式返回一条结果记录,而不是数组,它的每个字段都需要以对象的方式进行访问,数据列的名称区分字母大小写. 预处理语句查询: 使用预处理执行SQL时,拿到的执行结果并不是一个数组,我们需要自己将这些结果集绑定到指定的变量上,然后再通过遍历变量的方式获取到结果集中的所有数据. 如果在SELECT查询语句上也使用占位符去查询,并需要多次执行这一条语句时,也可以将mysqli_stmt对象中的bind_param()和bind_result()方法结合起来. <?

    1.8K10

    Sql 语句中 IN 和 EXISTS 的区别及应用「建议收藏」

    student表,然后执行 in 里面的子查询,再然后将查询到的结果和原有的user表做一个笛卡尔积,再根据我们的student.stuid IN score.stuid的条件,将结果进行筛选(既比较stuid...最后,得到符合条件的数据。 EXISTS语句:执行student.length次 指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。...语句的执行结果和上面的in的第一条执行结果是一样的。...以下为转载内容 原理解析补充: select * from A where id in(select id from B) 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来...EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

    94530
    领券