zoukankan      html  css  js  c++  java
  • yii 执行sql

    sql

              $sql = "SELECT ".join(',', $this->search_fields_channel)." FROM {{channel}} ORDER BY order_id ASC LIMIT 31";
                 $cmd = Yii::app()->db->createCommand($sql);
                   $rows= $cmd->queryAll();

    ar

    find,

    当我们需要从数据库中查询一条记录时,可以使用find()方法
    他的三个参数分别是:
            查询字段
            查询的条件(先让查询条件等于一个定位符)
            参数(给出定位符的值,可能概念上说的不对,但是就是这个意思)
    以下是简单举例应用
    find(array('select'=>'email',
               'condition'=>'email=:email',//查询条件是email等于一个定位符
               'params'=>array(':email'=>$this->email)));//参数是定位符等于一个值

    4、读取记录
    要读取数据表中的数据,我们可以通过如下方式调用 find 系列方法中的一种:
    // 查找满足指定条件的结果中的第一行
    $post=Post::model()->find($condition,$params);
    // 查找具有指定主键值的那一行
    $post=Post::model()->findByPk($postID,$condition,$params);
    // 查找具有指定属性值的行
    $post=Post::model()->findByAttributes($attributes,$condition,$params);
    // 通过指定的SQL语句查找结果中的第一行
    $post=Post::model()->findBySql($sql,$params);

    $posts=Post::model()->findAll($condition,$params);
    // 查找带有指定主键的所有行
    $posts=Post::model()->findAllByPk($postIDs,$condition,$params);
    // 查找带有指定属性值的所有行
    $posts=Post::model()->findAllByAttributes($attributes,$condition,$params);
    // 通过指定的SQL语句查找所有行
    $posts=Post::model()->findAllBySql($sql,$params);

    如果没有任何东西符合查询条件,findAll 将返回一个空数组。这跟 find 不同,find 会在没有找到什么东西时返回 null。
    除了上面讲述的 find 和 findAll 方法,为了方便,(Yii)还提供了如下方法:
    // 获取满足指定条件的行数
    $n=Post::model()->count($condition,$params);
    // 通过指定的 SQL 获取结果行数
    $n=Post::model()->countBySql($sql,$params);
    // 检查是否至少有一行复合指定的条件
    $exists=Post::model()->exists($condition,$params);

    5、update
    在 AR 实例填充了列的值之后,我们可以改变它们并把它们存回数据表。
    $post=Post::model()->findByPk(10);
    $post->title='new post title';
    $post->save(); // 将更改保存到数据库
    正如我们可以看到的,我们使用同样的 save() 方法执行插入和更新操作。如果一个 AR 实例是使用 new 操作符创建的,调用 save() 将会向数据表中插入一行新数据;如果 AR 实例是某个 find 或 findAll 方法的结果,调用 save() 将更新表中现有的行。实际上,我们是使用 CActiveRecord::isNewRecord 说明一个 AR 实例是不是新的。
    直接更新数据表中的一行或多行而不首先载入也是可行的。 AR 提供了如下方便的类级别方法实现此目的:
    // 更新符合指定条件的行
    Post::model()->updateAll($attributes,$condition,$params);
    // 更新符合指定条件和主键的行
    Post::model()->updateByPk($pk,$attributes,$condition,$params);
    // 更新满足指定条件的行的计数列
    Post::model()->updateCounters($counters,$condition,$params);
    在上面的代码中, $attributes 是一个含有以 列名作索引的列值的数组; $counters 是一个由列名索引的可增加的值的数组;$condition 和 $params 在前面的段落中已有描述。

    delete

    如果一个 AR 实例被一行数据填充,我们也可以删除此行数据。
    $post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
    $post->delete(); // 从数据表中删除此行
    注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了。
    使用下面的类级别代码,可以无需首先加载行就可以删除它。
    // 删除符合指定条件的行
    Post::model()->deleteAll($condition,$params);
    // 删除符合指定条件和主键的行
    Post::model()->deleteByPk($pk,$condition,$params);

    insert

    $post=new Post;
    $post->title='sample post';
    $post->content='post body content';
    $post->save();

    $post=new Post;
    $post->title='sample post';
    $post->content='content for the sample post';
    $post->create_time=time();
    $post->save();

    7、数据验证
    当插入或更新一行时,我们常常需要检查列的值是否符合相应的规则。如果列的值是由最终用户提供的,这一点就更加重要。总体来说,我们永远不能相信任何来自客户端的数据。
    当调用 save() 时, AR 会自动执行数据验证。验证是基于在 AR 类的 rules() 方法中指定的规则进行的。关于验证规则的更多详情,请参考 声明验证规则 一节。下面是保存记录时所需的典型的工作流。
    if($post->save())
    {
     

       // 数据有效且成功插入/更新
    }
    else
    {
        // 数据无效,调用  getErrors() 提取错误信息
    }
    当要插入或更新的数据由最终用户在一个 HTML 表单中提交时,我们需要将其赋给相应的 AR 属性。我们可以通过类似如下的方式实现:
    $post->title=$_POST['title'];
    $post->content=$_POST['content'];
    $post->save();
    如果有很多列,我们可以看到一个用于这种复制的很长的列表。这可以通过使用如下所示的 attributes 属性简化操作。更多信息可以在 安全的特性赋值 一节和 创建动作 一节找到。
    // 假设 $_POST['Post'] 是一个以列名索引列值为值的数组
    $post->attributes=$_POST['Post'];
    $post->save();

    condition: WHERE 子语句。默认为空。注意, 列要使用别名引用(例如:??.id=10)。
    params: 被绑定到 SQL 语句的参数. 应当为一个由 name-value 对组成的数组()。
    on: ON 子语句. 这里指定的条件将使用 and 操作符被追加到连接条件中。此选项中的字段名应被消除歧义。此选项不适用于 MANY_MANY 关联。
    order: ORDER BY 子语句。默认为空。注意, 列要使用别名引用(例如:??.age DESC)。
    with: 应当和此对象一同载入的子关联对象列表. 注意, 不恰当的使用可能会形成一个无穷的关联循环。
    joinType: 此关联的连接类型。默认是 LEFT OUTER JOIN。
    aliasToken:列前缀占位符。默认是“??.”。
    alias: 关联的数据表的别名。默认是 null, 意味着表的别名和关联的名字相同。
    together: 是否关联的数据表被强制与主表和其他表连接。此选项只对于HAS_MANY 和 MANY_MANY 关联有意义。若此选项被设置为 false, ......(此处原文出错!).默认为空。此选项中的字段名以被消除歧义。
    having: HAVING 子语句。默认是空。注意, 列要使用别名引用。
    index: 返回的数组索引类型。确定返回的数组是关键字索引数组还是数字索引数组。不设置此选项, 将使用数字索引数组。此选项只对于HAS_MANY 和 MANY_MANY 有意义
    此外, 下面的选项在延迟加载中对特定关联是可用的:
    group: GROUP BY子句。默认为空。注意, 列要使用别名引用(例如:??.age)。 本选项仅应用于HAS_MANY 和 MANY_MANY 关联。
    having: HAVING子句。默认为空。注意, 列要使用别名引用(例如:??.age)。本选项仅应用于HAS_MANY 和 MANY_MANY 关联。
    limit: 限制查询的行数。本选项不能用于BELONGS_TO关联。
    offset: 偏移。本选项不能用于BELONGS_TO关联。

  • 相关阅读:
    《java网络编程》
    画类图的使用工具----转载
    桌面应用要素
    java桌面应用
    java网络程序
    网络程序
    java中的数据类型
    数据类型要素
    java中的设计模式
    输入一个年龄,判断年龄范围
  • 原文地址:https://www.cnblogs.com/ldms/p/3152561.html
Copyright © 2011-2022 走看看