Yii deleteByAttributs 用法,慎用Dao的delete

 更新时间:2016年11月25日 17:27  点击:1511
本文章来给各位同学介绍关于Yii deleteByAttributs 用法,慎用Dao的delete,希望此文章对大家会有所帮助。

Yii框架一定要慎用Dao的delete,一不小心它生不成条件的话,就变成了整表删除。

可以用ActiveRecord的deleteByAttributes或deleteAll方法相对不容易写错。

deleteByAttributes用法如下:

 代码如下 复制代码

MyClass::model()->deleteAllByAttributes(array(
    'phone_number'=>$phoneNumber,
));

或者第一个参数为空,使用第二个条件参数

 代码如下 复制代码

MyClass::model()->deleteAllByAttributes(array(),'`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber,
));

或者使用deleteAll():

 代码如下 复制代码

MyClass::model()->deleteAll('`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber,
));

再来一个带in条件的

 代码如下 复制代码

$condition = new CDbCriteria();
$condition->addCondition('status=:status');
$condition->params = array(':status'=>1);
$condition->addInCondition('user_id',array(100111,100221,100221));
User::model()->deleteAll($condition);Dao带in条件的示例


Yii::app()->db->createCommand()
->delete('mw_user', array('and', 'user_id=:user_id', array('in', 'position_id', array(1,2,3))),array(':user_id'=>121111));

但是请慎用DAO的delete,当你的条件写错一点,它将无法生成where条件,同时sql语句中也没有了where,但还不一定报错,结果就成了没有where的delete,结果会是整表被删除了。

我们很多时候会在一些网站上,比如写在线简历的时候,会发现我们的图片选择一下,就会立即显示在当前页面。我们常常以为这种东西只有ajax才能实现,今天我稍微学习了一下,发现这种东西并不是ajax实现的。

最终还是用我们的基本知识HTML 中的FORM 来实现上传的。好的,现在我就把我知道的写出来,作为学习之用,当然这只是我自己的学习笔记,如果有错的地方,希望同道者给以指点一二。

首先我们明确一点,上传图片,我们还是用<from ….enctype=”multipart/form-data”>这种情况。

但是如何可以作到不刷新就把上传的图片显示出来呢?这里我们需要对<iframe></iframe>进行一个了解。

用过这个标签的朋友都知道,它可以将你的页面分成几个部分,且每个部分可以有自己的url,即显示几个不同的页面。说到这里或许有些朋友已经知道了这个是怎么一回事了。没错,上传图片就是利用的这个原理。看起来像是在同一个页面,没有跳转,然后事实上已经跳转了,只是我们没有看到而以。好的,下面是一个简单的例子,希望对大家都所帮助。(php+html)

首先是index.php页面,代码简单如下:

 代码如下 复制代码

<form id=”content” action=”hello.php” method=”post” target=”yframe” enctype=”multipart/form-data”>
<input type=”file” name=”tValue”>
<input type=”submit” value=”submit”>
<iframe name=”yframe” src=”hello.php” style=”border:none;”></iframe>
</form>
<input type=”text”>

然后是hello.php页面,也就是图片上传的页面

 代码如下 复制代码

<?php
//echo $_FILES["tValue"]["tmp_name"];
if(move_uploaded_file($_FILES["tValue"]["tmp_name"], “img/a.jpg”))
{
echo “<img src=’img/a.jpg’ width=’250px’height=’130px’>”;
}
?>

可以说已经完成了,这几行代码就可以将我们所需要的效果实现。

下面来一个分析:

首先在form里面有一个target,且它的值是位于它里面的一个iframe.意思是,我们提交后,页面会在这个iframe里面显示出来,

从iframe的定义来看,它的内容就是hello.php。所以我们的表单提交后即直接到了这个iframe里面,所以页面不会跳转,但我们完成了上

传,在从hello.php来看,上传后它会选择将图片显示出来,由前面可以知道hello.php的内容会显示到iframe里面,所以最后我们看到的效果就是页面没有跳转,我们可以做出一个类似ajax实现的效果,上传图片后可以在当前将其显示出来。

本文章来给各位同学介绍关于ucenter整合,通信失败,调试测试排查方法,希望此方法对各位同学会有所帮助哦。

失败是因为你的应用程序的api/uc.php中可能有错误.比如ucenter规定.只有uc.php这个文件正常返回1,才会提示通信成功.但如果你的返回了一个sql错误.而不是1,则一定是提示失败的.怎么测试呢

 代码如下 复制代码

<?php
include_once “config/config_global.php”;
include_once “config/config_ucenter.php”;
include_once “uc_client/client.php”;
echo uc_user_synlogin(2); //1为用户的ID

?>
<script type=”text/javascript”>
var obj=document.getElementsByTagName(“script”);
for(var i=0;i<obj.length-1;i++) {
document.write(“<a href=”"+obj[i].src+””>”+obj[i].src+”</a><hr>”);
}
</script>

上面的代码保存成test.php文件.放在你的dz论坛或ucenter所在的根目录中,直接用域名.com/test.php 看下有什么提示错误.当然.uc.php文件中

error_reporting(0); 这一句最后先注释掉.错误会更清晰的显示.找到错误后.这一句一定要加上.否则.可能一直通信失败.

本文章来给各位同学详细介绍关于Drupal7中配置Memcache方法详解,希望此方法对各位同学会有所帮助哦。

Memcache的配置就不多说,drupal由于模块较多,数据库调用频繁,因此memcache是drupal站点中必备的配置,本文大概列一下Drupal7中关于memcache的配置情况,以方便大家查阅。

1. 安装memcache服务以及启动memcached。

2. 安装drupal的memcache模块。(http://drupal.org/project/memcache)

3. 配置settings.php

 代码如下 复制代码
 $conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
  // The 'cache_form' bin must be assigned no non-volatile storage.
  $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
  $conf['cache_default_class'] = 'MemCacheDrupal';
  $conf['memcache_key_prefix'] = 'something_unique';

注意,需要将memcache.inc的文件路径写正确,如Drupal模块目录组织方式总结中提到,我们一般将memcache模块会放置在contrib文件夹下面,因此路径可能是 sites/all/modules/contrib/memcache/memcache.inc。
此外memcache_key_prefix最好设置一下。

4. 多个memcachd服务。
默认情况下,如果不配置memcache_servers以及memcache_bins的话,Drupal会认为只有一个server,即127.0.0.1:11211,如果有多个memcache实例的话,需要添加如下配置。

 代码如下 复制代码
$conf['memcache_servers'] = array(
  '10.1.1.1:11211' => 'default',
  '10.1.1.1:11212' => 'default',
  '10.1.1.2:11211' => 'default',
  '10.1.1.3:11211' => 'cluster2',
  '10.1.1.4:11211' => 'cluster2'
);
$conf['memcache_bins'] = array(
  'cache'  => 'default',
  'cache_filter' => 'cluster2',
  'cache_menu' => 'cluster2'
);

一切就绪。

最后讲解一下单台机器如何配置多个memcache实例,即单台机器的memcache集群搭建。
我们需要修改2个文件,一个是启动脚本/etc/init.d/memcached-multi,另一个是配置文件/etc/sysconfig/memcached。

 代码如下 复制代码
/etc/sysconfig/memcached

是用来配置多个memcache实例的大小

 代码如下 复制代码
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="512"
OPTIONS=""
MULTIBUCKET="2"
CACHESIZEARRAY[1]="1024"
CACHESIZEARRAY[2]="128"/etc/init.d/memcached-multi

是用来启动memcache集群。(start、stop、restart)

 代码如下 复制代码
#! /bin/sh
#
# chkconfig: - 55 45
# description:    The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# pidfile: /var/run/memcached/memcached.pid
 
# Standard LSB functions
#. /lib/lsb/init-functions
 
# Source function library.
. /etc/init.d/functions
 
PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=64
OPTIONS=""
MULTIBUCKET=""
 
if [ -f /etc/sysconfig/memcached ];then
    . /etc/sysconfig/memcached
fi
 
[ -z "$MULTIBUCKET" ] && MULTIBUCKET=1
 
# Check that networking is up.
. /etc/sysconfig/network
 
if [ "$NETWORKING" = "no" ]
then
    exit 0
fi
 
RETVAL=0
prog="memcached"
 
start () {
    echo -n $"Starting $prog: "
    # insure that /var/run/memcached has proper permissions
    if [ "`stat -c %U /var/run/memcached`" != "$USER" ]; then
        chown $USER /var/run/memcached
    fi
 
    for i in `/usr/bin/seq 1 $MULTIBUCKET`; do
        THISCACHESIZE=$CACHESIZE
        [ ${#CACHESIZEARRAY[*]} -gt 0 -a ${CACHESIZEARRAY[$i]:-0} -gt 0 ] && THISCACHESIZE=${CACHESIZEARRAY[$i]}
        daemon --pidfile /var/run/memcached/memcached.pid memcached -d -p $PORT -u $USER  -m $THISCACHESIZE -c $MAXCONN -P /var/run/memcached/memcached-$i.pid $OPTIONS
        let RETVAL=$RETVAL+$?
        let PORT=$PORT+1
    done
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
    echo -n $"Stopping $prog: "
    for i in `/usr/bin/seq 1 $MULTIBUCKET`; do
        killproc -p /var/run/memcached/memcached-$i.pid /usr/bin/memcached
        let RETVAL=$RETVAL+$?
    done
    echo
    if [ $RETVAL -eq 0 ] ; then
        rm -f /var/lock/subsys/memcached
        rm -f /var/run/memcached.pid
    fi
}
 
restart () {
        stop
        start
}
 
# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    echo "Warning: This status check is laughable.  Inspect netstat or ps output manually."
    status memcached
    ;;
  restart|reload|force-reload)
    restart
    ;;
  condrestart)
    [ -f /var/lock/subsys/memcached ] && restart || :
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    exit 1
esac
 
exit $RETVAL

至此一些就绪。

前面有讲过生成随机密码,下面我再来给大家介绍一些常用的生成随机字符串的函数吧,这些都是我们自定义的函数,当然也有系统自带函数了,不过都比较简单了。

mt_rand函数

例子

在本例中,我们会返回一些随机数:

 代码如下 复制代码

<?php
echo(mt_rand());
echo(mt_rand());
echo(mt_rand(10,100));
?>
输出类似:

3150906288
513289678
35

下面我们来看看mt_rand函数的实例吧。

 代码如下 复制代码

function roll () {
  return mt_rand(1,6);
  }

echo roll();

function roll ($sides) {
  return mt_rand(1,$sides);

}
  echo roll(6); // roll a six-sided die
  echo roll(10); // roll a ten-sided die
  echo roll(20); // roll a twenty-sided die

上面都只能生成简单的纯数字,不能是字母或数字与字母的,下面我们需用到自定义函数了

 代码如下 复制代码

<?php
function genRandomString($len) {
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
    );

    $charsLen = count($chars) - 1;

    shuffle($chars); // 将数组打乱
   
    $output = "";
    for ($i=0; $i<$len; $i++) {
        $output .= $chars[mt_rand(0, $charsLen)];
    }
   
    return $output;
}

$str = genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);
$str .= "<br />";
$str .= genRandomString(25);
$str .= "<br /><br />";

echo $str;
?>


程序输出如下:


DmLVAmDkEJz8wHXRCNwzvANlB
BILZSA19YyuSVcR17KrrZsOKO
inlWlQF0GSabN3l589y9s16Gg

默认生成的随机字符串长度为5,生成的字符串包含:数字+大写字母

函数功能:

1、生成指定长度的随机字符串

2、灵活选择生成的随机字符串的复杂度

 代码如下 复制代码

/**
  +----------------------------------------------------------
 * 生成随机字符串
  +----------------------------------------------------------
 * @param int       $length  要生成的随机字符串长度
 * @param string    $type    随机码类型:0,数字+大写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
  +----------------------------------------------------------
 * @return string
  +----------------------------------------------------------
 */
function randCode($length = 5, $type = 0) {
    $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
    if ($type == 0) {
        array_pop($arr);
        $string = implode(",", $arr);
    } else if ($type == "-1") {
        $string = implode(",", $arr);
    } else {
        $string = $arr[$type];
    }
    $count = strlen($string) - 1;
    for ($i = 0; $i < $length; $i++) {
        $str[$i] = $string[rand(0, $count)];
        $code .= $str[$i];
    }
    return $code;
}

1、预置一个的字符数组 $chars ,包括 a – z,A – Z,0 – 9,以及一些特殊字符
     2、通过array_rand()从数组 $chars 中随机选出 $length 个元素
     3、根据已获取的键名数组 $keys,从数组 $chars 取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。

 代码如下 复制代码

function make_password( $length = 8 )
{
    // 密码字符集,可任意添加你需要的字符
    $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
    'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's',
    't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D',
    'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O',
    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z',
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!',
    '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_',
    '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',',
    '.', ';', ':', '/', '?', '|');

    // 在 $chars 中随机取 $length 个数组元素键名
    $keys = array_rand($chars, $length);

    $password = '';
    for($i = 0; $i < $length; $i++)
    {
        // 将 $length 个数组元素连接成字符串
        $password .= $chars[$keys[$i]];
    }

    return $password;
}

[!--infotagslink--]

相关文章

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • jQuery的attr与prop使用介绍

    attribute与propertyattribute和property都可以翻译为属性,为了以示区别,通常把这两个单词翻译为属性与特性。...2013-10-13
  • 解决Mybatis中mapper.xml文件update,delete及insert返回值问题

    这篇文章主要介绍了解决Mybatis中mapper.xml文件update,delete及insert返回值问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-23
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • Vue中 axios delete请求参数操作

    这篇文章主要介绍了Vue中 axios delete请求参数操作,具有很好的参考价值,希望对大家有所 帮助。一起跟随小编过来看看吧...2020-08-26
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • jquery checkbox无法用attr()二次勾选问题的解决方法

    下面小编就为大家带来一篇jquery checkbox无法用attr()二次勾选问题的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-29
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25
  • mysql delete 多表连接删除功能

    这篇文章主要介绍了mysql delete 多表连接删除功能的相关资料,需要的朋友可以参考下...2017-03-14
  • window.onerror()的用法与实例分析

    目前在做window.onerror时上报js错误信息的事,整理下相关资料,需要的朋友可以参考下...2016-01-29
  • C语言循环结构与时间函数用法实例教程

    这篇文章主要介绍了C语言循环结构与时间函数用法,是C语言中非常重要的一个技巧,需要的朋友可以参考下...2020-04-25
  • php中 ->与 ==>符号的用法与区别

    本文章来给大家介绍一下在php中 ->与 ==>符号的用法与区别,有需要了解的朋友可尝试参考。 “->”(减号、右尖括号) 用于类中,访问类里的函数或对象,比如:...2016-11-25
  • jQuery中attr()与prop()函数用法实例详解(附用法区别)

    这篇文章主要介绍了jQuery中attr()与prop()函数用法,结合实例形式详细分析了attr()与prop()函数的使用技巧与相关注意事项,并附带了attr()与prop()函数用法的区别,需要的朋友可以参考下...2016-01-02
  • delete误删数据使用SCN号恢复(推荐)

    这篇文章主要介绍了使用scn号恢复误删数据问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11