今天给客户弄模板,发现友情连接不能使用底层模板了
主要是这几个不能用了[field:webname/][field:url/][field:logo/]
对于套用别的定义好的LOGO样式的时候非常不方便
于是只好查看了一下源码\include\taglib\flink.lib.php
发现替换的函数竟然有些错误的地方
看来DEDE的开发人员不仔细检查啊
大概116行替换成下面
$rbtext = preg_replace(“/\[field:url([\/\s]{0,})\]/isU”, $dbrow->url, $innertext);
$rbtext = preg_replace(“/\[field:webname([\/\s]{0,})\]/isU”, $dbrow->webname, $rbtext);
$rbtext = preg_replace(“/\[field:logo([\/\s]{0,})\]/isU”, $dbrow->logo, $rbtext);
不解释~
看得懂就看,看不懂好好学学PHP
阅读全文
WordPress显示所有文章的标题和时间有什么好处了?其实在很多的时候我们需要将网站上所有的文章都列出来便用户查阅,以免让用户到处去找,这样就可以给用户一个很好的体验。那么怎么样去实现了?
1、首先是最主要的代码:
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>2、以上代码就实现了我们所需要的功能,最主要的就是第2行的代码,下面来解释一下:
query_posts:这个是WordPress提供用来查询文章的函数;
showposts=20000:文章显示的数量,因为默认是显示10篇文章,所以我们将这个值设置大一点,就可以显示所有文章了;
orderby=date:这个是排序规则,表示按时间排序;
order=DESC:表示按降序还是升序排序,ASC是升序,DESC是降序。
3、以上还只是告诉我们怎么去实现,还没有看到效果。为了方便,我们直接将代码复制到我们模板的index.php文件最后面,如下:
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>
</body>
</html>
保存后,我们就可以在首页最下面看到效果了。
=============================
将query_posts()放在LOOP之前限定你所需要的条件,wp_query会产生一个新的使用你的参数的SQL查询,而忽视通过URL接收到的其它的参数,如果想不忽略,可以在调用中使用$query_string。
query_posts($query_string . “&order=ASC”)
设置文章显示的顺序,但是不干扰其余的查询字符串,参数前须有“&”符号
其他还有N多用途~~
主页不显示某一分类下的日志
<?php if (is_home()) { query_posts(“cat=-3”); } ?>
获得特定的日志
<?php query_posts(‘p=5’); ?>
获得特定的页面
<?php query_posts(‘page_id=7’); //只返回网页7 ?>
<?php query_posts(‘pagename=about’); //只返回关于网页 ?>
<?php query_posts(‘pagename=parent/child’); // 返回母网页的子网页 ?>
创建所有文章列表,并且提供分页功能
<?php query_posts($query_string.’posts_per_page=-1′); while(have_posts()) { the_post(); put your loop here ; } ?>
==========================================
类别 参数
显示属于某个类别的文章
cat
category_name
根据ID显示一个类别
只显示来自一个类别ID的文章
query_posts(‘cat=4’);
根据名称显示一个类别
只显示属于某个类别名的文章
query_posts(‘category_name=Staff Home’);
显示几个类别及ID
显示属于几个类别ID的文章
query_posts(‘cat=2,6,17,38’);
删除某个类别的文章
显示所有的文章,但是类别ID前面有个’-’(负号)负号的类被除外。
query_posts(‘cat=-3’);
删除属于类别3的所有文章。有一个限制性条款:会删除只属于类别3的所有文章。如果一个类别也同时属于其它的类别,这个类别仍然不会被删除。
标签参数
显示与某个标签相关的文章
tag
为某个标签提取文章
query_posts(‘tag=cooking’);
获得拥有任何这样的标签的文章
query_posts(‘tag=bread,baking’);
获取拥有这三个标签的文章
query_posts(‘tag=bread+baking+recipe’);
作者参数
你也可以根据作者限制文章数目
author_name=Harriet
author=3
author_name在 user_nicename区操作, 同时作者 在作者id上操作。
文章 & 网页参数
返回一篇单独的文章或者一个单独的网页
p=1 – 使用文章 ID来显示第一篇文章
name=first-post – 使用 post Slug 显示第一篇文章
page_id=7
pagename=about
showposts=1 (你可以使用 showposts=3,或者其它的任何数字显示一定数目的文章)
由于 模板层级方面的原因, home.php先执行了。这意味这你可以编写一个home.php,home.phh调用query_posts()重新得到一个特别的网页并且将那个 网页设置为你的首页。没有任何插件或者hacks,你需要运行一个机制,并且显示和维护一个非博客的首页。
更有用的方法,可能是利用WP的网页功能并且为你的首页使用这个功能。你可以将”关于网页”设置为entry point或者设置为站点的末页。你可能执行一些更动态的步骤,设置一个自定义网页,显示最近的评论,文章,类别,存档。请看看下面的例子。
时间参数
得到某个特别的时间段内发表的文章
hour=
minute=
second=
day= – 一个月中的每一天; 显示,例如,十五号发表的所有文章。
monthnum=
year=
网页参数
paged=2 -显示使用”以前发表的文章”链接时,通常在网页2上显示的文章。
posts_per_page=10 -每个网页显示的文章数目;-1这个值,会显示所有的文章。
order=ASC -按时间顺序显示文章,以相反的顺序显示DESC(默认)
Offset 参数
你不能转移或者忽视一个或者更多的原始文章,这些文章一般是你的query同时使用offset参数收集到的。
下面的函数会显示(1)最近的5篇文章
query_posts(‘showposts=5&offset=1’);
根据参数排序
根据这个区给得到的文章排序
orderby=author
orderby=date
orderby=category
orderby=title
orderby=modified
orderby=modified
orderby=menu_order
orderby=parent
orderby=ID
orderby=rand
同时考虑”ASC”或者的”DESC”的排序参数
联合参数
你可能从上面的例子中注意到,你使用一个&(&符号)将参数组合在一起,像:
query_posts(‘cat=3&year=2004’);
类别13,关于当前月份显示在主页上的文章:
if (is_home()) { query_posts ($query_string . ‘&cat=13&monthnum=’ . date(‘n’,current_time(‘timestamp’))); }
在2.3版本中,这个参数组合会返回属于类别1同时属于类别3的文章,只显示两篇(2)文章,根据标题,按降序排列:
query_posts(array(‘category__and’=>array(1,3),’showposts’=>2,’orderby’=>title,’order’=>DESC));
在2.3和2.5版本中,你可能期待下面的内容,返回属于类别1并且标签为”苹果”的所有文章
query_posts(‘cat=1&tag=apples’);
一个bug阻止这个运行。请看看Ticket #5433,一个工作区要搜索几个使用+的标签
query_posts(‘cat=1&tag=apples+apples’);
对于先前的查询,这个会产生期待的结果。注意使用’cat=1&tag=apples+oranges’能够产生期待的结果。
————————————
所以我的调用是
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC&cat=13”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>
阅读全文
用Fireworks便可轻松解决批量添加水印的问题。
题目:
印有字样/图案的透明.gif图片(水印)1张,待处理图片n张,水印尺寸与待处理图基本相符,需要将水印贴到待处理图上。
步骤:
1、打开Fireworks,并用其打开水印,及待处理的第一张图片。
2、全选水印,复制,粘贴到待处理图片上。
3、看下方的历史记录(“帧 和 历史记录”),有一个粘贴命令,选中它,点下方的保存按钮,名字随便起一个如“水印”。
4、点击右上角的文件菜单,选择批处理,选择你要批量处理的图片,点增加,再点继续。
5、在“命令”中找到你刚才保存的命令,点添加,点继续。
6、选择输出的位置,建议自定义一个新的目录,以后出了什么问题好重做。
7、操作完成,接下来等待Fireworks处理便可。若待处理图片的尺寸有变化,它会提示你要不要重新取样,我选不要,水印仍按原本地贴上去。
大功告成,此方法虽然不快,但也慢不到哪去,总比去找那些杂七杂八的软件好多了。以上只是一个简单的主体步骤,各位可扩展一下,添加更多的效果。
阅读全文
Amazon Affiliate Link Localizer
这是一款可以发现博客中amazon链接,并能自动转换成联盟链接的插件。只需要提供联盟ID就可以运行。有趣的是,这款插件能根据访问者所在地理位置转换联盟链接。例如,来自中国的访问者可以直接被送到amazon.cn 这个插件.的原理是.你要在后设度AMAZON的IP.然后.你在网站里只要出现是阿马逊的网址.就自动把这个网址变成你的会员IP网址.
Amazon Autoposter
这款插件发现博客中的产品并自动产生亚马逊广告。你需要定义关键词,然后插件会显示相关产品。因此,这种插件可以帮助你向访问者展示同类产品。它有更多定制选择,如产品描述长度,小图标等。
这个也没有中国的帐号选.
Amazon Product In a Post Plugin
该插件可以向任何博客添加特定产品。并能在博文上面和下面显示亚马逊产品。只需要提供联盟ID就可以确保插件添加你想要的产品。可以自己定制CSS改变外观。
这个也没有中国的帐号选.
阅读全文
最有效的方法是制作网站,下面举两个例子
首先制作一个网站,一次出售多种产品。例如:一个网站评论2012年最佳电视。您可以评论很多不同的电视,比较哪些是廉价的电视,哪些是最佳电视。另一个例子是卖2012年圣诞节礼物,你可以分享不同的礼物,例如送给妈妈的礼物,送给女友的礼物,送给男友的礼物。
在第二种方法中,你可以只侧重于建立一个单一的产品。例如,一个专门为HDTV三星D8000建立的网站。这是一个高价位的电视,每出售一台,可以帮助你赚取$ 70至$ 120。你可以做一个关于这台电视的专业博客:有关价格,评论,照片,修复电视的应用程序等等。这个网页的访问者是那些对该产品感兴趣的人。因此,购买率会更高。你应该阅读这篇文章:做亚马逊联盟,卖最好的产品,语言和图像可增加购买率。你也可以用微博推销某件商品。
如何选择产品赚亚马逊联盟的钱,这是一个非常重要的问题,会影响你的收入。注意:选择的产品必须是在亚马逊中经常被购买的。你应该注意到,在美国,除了亚马逊也有易趣,沃尔玛, Best Buy和许多其他较小的零售商。因此,应该选亚马逊中的主流产品。
这些产品包括:图书,DVD ,电子产品,健身器材,鞋,服装,家用工具等。而对于书籍,亚马逊是全球领先的书店,所以在亚马逊买书是最常见的。你可以选择图书产品进行推销。亚马逊的电子产品也很好卖,电视,笔记本电脑,手机和数码相机。我在亚马逊已售出相当多的电子产品,如电视摄像机。这是很好做的,卖一台成本1700美元的电视机可赚取72美元。然而,电子产品的佣金是4% 。略微低了一些,但它本身价格高,也好卖。你也可以考虑iPhone,iPad 的配件。这些产品在亚马逊中也很好卖。
你应该了解你可以赚取亚马逊联盟的多少钱。我们注意到,只有产品下单并被寄出以后你才能得到佣金。而每月的佣金比例都将复原。对于电子产品,你一直仅能得到4%的佣金。此外的其他产品,您会收到从4%至8.5%不等的佣金。佣金比例是根据销售产品的数量而浮动。请注意,如果你有权得到7 %的佣金,那么在该月份销售的所有产品将将得到7%的佣金。
你也许已经开始从亚马逊联盟中赚钱,但购买率比较低。阅读以下提示将有更好的转化率和收入。使用最好的文字和图像可以帮助你拥有最好的购买率。你应该选择产品,关键字,以进行搜索引擎优化,可以帮助您得到更高的亚马逊联盟佣金。 下面这些话应该包含在你的文章内容里面:
See more detail 更多的细节
Real full reviews全部评论
Update new price更新价格
See video about查看相关视频
View more images查看更多图片
Amazon customers reviews亚马逊客户的评价
使用这些词可以帮助你有更好的转化率,增加您的收入。此外,你可以给出报价或产品说明,并提示说,游客到亚马逊可以阅读完整内容。你应该大胆使用醒目的颜色,以吸引更多的游客。 可以使用一些文本链接:今天大优惠,所有折扣电子产品,高清晰度电视有500元以下的优惠,iPhone的优惠为30%,将有最好的转化率。
关于使用图像,很容易,你应该插入优惠,促销或折扣的图片。在美国,很多人使用iPhone,所以你可以放一个有关iPhone配件的banner。再如,当你推销Xbox 360 ,你可以弄一个横幅:便宜的Xbox 360游戏,很多人会注意它。
阅读全文
貌似没什么好记录了
前几天从亚马逊上面买了个相机-佳能600D,配了个18-135的镜头,还买了个包,一共花了6千多
我寻思着还得弄个镜头清洁工具,比如镜头笔什么的,京东上有39块的
网上说镜头经常擦不好,最好装个UV镜,我查看了一下,京东上也有肯高的,貌似才75块,准备入手一个
还有就是电池了,这个是我最担心的,相机貌似比较耗电,尤其是出去玩的时候,整天都在拍,所以我还是准备入手一块电池
网上报价原装的200以上,再看看国产的才69块,想想是备用电源,还是弄两块国产的算了
今天忽然想起有些域名可能到期了,进去续费了一个,GODADDY的域名貌似也涨价了,用了优惠码还是接近9美元
我记得以前都是8美元左右的,其他的域名貌似还没到期,暂时不管了
还有前段时间,助力车又被偷了,又买了一辆700块的,修了一下,花了100块左右~
不过这车有报警器,应该被偷的几率会小一些了~
LP前段时间照了B才超,医生说可能是女孩~让我郁闷了几天,我跟LP说,以后我的坟头估计没人上香了
等我死了以后,烧成骨灰,直接撒在老家山头算了
上次去超市碰见了她,后来在QQ相册里发现她也生了一个女儿~
可惜一切都成为了回忆~于是狠心把她QQ删除了~
让过去过去吧
阅读全文
拍集体照用什么镜头为佳?无论是户外徒步、家庭聚餐都能遇到拍合影的情况,那么拍集体照的镜头该怎么选呢?下面就让小编给你讲讲。
1、应选用标准镜头
标准镜头的视角与人眼一致,用广角镜头拍集体照时会出现透视变形现象,前排人物离镜头近而头大,后排人物离镜头远而头小。因此,拍集体照不能使用广角镜头。如果使用变焦镜头拍集体照也应选择50毫米焦距段。
2、光圈和快门速度的选择
集体合影的特点是:人物是静止的且纵深大。要获得较大的景深,一般得使用小光圈和较慢的快门速度。20~30人的合影宜用f/5.6~f/8光圈;在60~70人合影时宜用f/8~f/11光圈,在100人以上合影时宜用f/11~f/16光圈。快门速度最好不低于1/30秒,这样可避免个别人在拍摄中突然的晃动。当然,在光线较差的情况下,为了保证有足够的景深,只好牺牲快门速度,但一般不能低于1/8秒。
3、使用三脚架和快门线
因为拍摄集体合影需要较大的景深,所以常选用较小的光圈拍摄,这时快门速度较慢,为防止拍摄中出现“手震”,影响画面清晰度,因此在拍照中必须使用三脚架稳定照相机。
4、光线的选择
拍集体合影以柔和的自然光为好,应尽量避免直射阳光和逆光。时间应选在上午10点至下午4点这个时段,不要在树荫下拍照,以防产生花脸。
阅读全文
1。从www.sqlite.org下载SQLite 3.3.4的版本
为了方便,我把它解压了,就一个SQLite3.exe,放入Windows目录下。
Cmd 进入命令行
1)
创建数据库文件:
>SQLite3 d:\test.db 回车
就生成了一个test.db在d盘。
这样同时也SQLite3挂上了这个test.db
2)
用.help可以看看有什么命令
>.help 回车即可
3)可以在这里直接输入SQL语句创建表格 用;结束,然后回车就可以看到了
4)看看有创建了多少表
>.tables
5)看表结构
>.schema 表名
6)看看目前挂的数据库
>.database
7)如果要把查询输出到文件
>.output 文件名
> 查询语句;
查询结果就输出到了文件c:\query.txt
把查询结果用屏幕输出
>.output stdout
8)把表结构输出,同时索引也会输出
.dump 表名
9)退出
>.exit 或者.quit
2。从http://sqlite.phxsoftware.com/下载Ado.net驱动。
下载了安装,在安装目录中存在System.Data.SQLite.dll
我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了
所有的Ado.net对象都是以SQLite开头的,比如SQLiteConnection
连接串只需要如下方式
Data Source=d:\test.db 或者DataSource=test.db–应用在和应用程序或者.net能够自动找到的目录
剩下的就很简单了~~
3。SQL语法
由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜
1)创建一个单个Primary Key的table
CREATE TABLE [Admin] (
[UserName] [nvarchar] (20) PRIMARY KEY NOT NULL ,
[Password] [nvarchar] (50) NOT NULL ,
[Rank] [smallint] NOT NULL ,
[MailServer] [nvarchar] (50) NOT NULL ,
[MailUser] [nvarchar] (50) NOT NULL ,
[MailPassword] [nvarchar] (50) NOT NULL ,
[Mail] [nvarchar] (50) NOT NULL
) ;
CREATE TABLE [ESOA_User] (
[UID] [integer] PRIMARY KEY NOT NULL ,
[U_Account] [varchar] (50) NOT NULL ,
[U_Password] [varchar] (50) NOT NULL ,
[U_UserName] [varchar] (50) NOT NULL ,
[U_Company] [varchar] (100) NULL ,
[U_DepartmentID] [integer] NOT NULL ,
[U_Tel] [varchar] (50) NULL ,
[U_QQ] [varchar] (50) NULL ,
[U_Address] [varchar] (100) NULL ,
[U_Post] [varchar] (10) NULL ,
[U_UserGroup] [integer] NOT NULL ,
[U_Power] [varchar] (50) NULL ,
[U_Lock] [tinyint] NOT NULL ,
[U_Memo] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
2)创建一个多个Primary Key的table
CREATE TABLE [CodeDetail] (
[CdType] [nvarchar] (10) NOT NULL ,
[CdCode] [nvarchar] (20) NOT NULL ,
[CdString1] [ntext] NOT NULL ,
[CdString2] [ntext] NOT NULL ,
[CdString3] [ntext] NOT NULL,
PRIMARY KEY (CdType,CdCode)
) ;
3)创建索引
CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);
还可以视图等等。
4.还有很有用的SQL
Select * from Sqlite_master
Select datetime('now')
Select date('now')
Select time('now')
以及很多函数,具体可以参考SQLite的wiki.
oh,还有就是看到有人说,好像成批插入的时候,启动事务,比不启动事务快n倍
还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare.
===========
sqlite可以在shell/dos command底下直接执行命令:
sqlite3 film.db "select * from film;"
输出 HTML 表格:
sqlite3 -html film.db "select * from film;"
将数据库「倒出来」:
sqlite3 film.db ".dump" > output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):
sqlite3 film.db < output.sql
在大量插入资料时,你可能会需要先打这个指令:
begin;
插入完资料后要记得打这个指令,资料才会写进数据库中:
commit;
;
————————————
System.Data.Sqlite入手。。。
首先import/using:
代码
using System.Data.SQLite;
Connection和Command:
代码
private SQLiteConnection conn;
private SQLiteCommand cmd;
连接db:
代码
conn = new SQLiteConnection("Data Source=c:\\test.db");
conn.Open();
INSERT/UPDATE:
代码
cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')";
cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1";
cmd.ExecuteNonQuery();
SELECT:
代码
cmd.CommandText = "SELECT ID, name FROM user";
SQLiteDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("ID: " + reader.GetInt16(0));
Console.WriteLine("name: " + reader.GetString(1));
}
}
—
sqlite是最近比较火的一个小型embeddable RDBMS。 用C实现的,开源,memory footprint非常小,而且对不同的语言有很多wrapper支持。
在.NET中使用sqlite,其实很简单,主要是找个.NET的wrapper。看了几个,最终选了phpguru的SQLite.NET
把sqlite.dll和SQLiteClient.dll放在.NET的current path下面,在项目的references中添加SQLiteClient.dll
程序中引用
c# 代码
using SQLite.NET;
使用方法,打开db:
c# 代码
try
{
Console.WriteLine("opening db…");
// Open database
SQLiteClient db = new SQLiteClient("c:\test.db");
}
catch (SQLiteException e)
{
Console.WriteLine("Fatal error: {0}", e.Message);
return;
}
select应用:
c# 代码
ArrayList tables = db.GetColumn("SELECT name FROM sqlite_master WHERE type = 'table'");
foreach (string tableName in tables)
{
Console.WriteLine("\t" + tableName);
}
其他update,insert,delete都支持得不错。 sqlite小巧玲珑,用起来十分方便。
Google Gears和Adobe AIR都在使用sqlite,看来必有其过人之处。。。
—
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <——————-")。
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
DbTransaction trans = conn.BeginTransaction(); // <——————-
try
{
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit(); // <——————-
}
catch
{
trans.Rollback(); // <——————-
throw; // <——————-
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
执行一下,耗时 0.2 秒。这差距是不是太大了点?
为什么只是简单启用了一个事务会有这么大的差距呢?
很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,
这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
阅读全文
相信不少朋友升级或者安装了WordPress 3.4 版本以上会 发现运行Wordpress的时候, 登入后台想更换新的主题时候,
居然无法显示主题, 后台只显示:
You only have one theme installed right now. Live a little! You can choose from over 1,000
free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes
tab above.
截图:
于是在百度上面搜索了相关问题的解决方法, 发现找不到相关的解决方案, 只能跑去谷歌上面搜索英文相关问题解决方案.但
是找了两天时间, 今天无意间把上面的”You Onlu have one theme installed right now.”放在谷歌里面搜索了一下, 终于找
到了答案. 答案是在服务器或者VPS上面的”php.ini”里面的函数中的disable_funcions = 后面的"scandir"去掉就行了.
在LNMP的环境下:
运行命令: vi /usr/local/php/etc/php.ini
搜索 “scandir” 然后将这个删除掉,顺便把”逗号”也删除了,然后保存退出
最后重启LNMP: /root/lnmp restart
这样就可以显示了.
阅读全文
其实很简单的
涉及到还原的其实就3个文件
config.php sys_data_done.php sys_data_revert.php
我把他们都复制了,重命名以别的名字开头,比如变成
xh_config.php xh_sys_data_done.php xh_sys_data_revert.php
然后打开 xh_config.php去掉验证
大概34行后面变成
//检验用户登录状态
/* $cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
header(“location:login.php?gotopage=”.urlencode($dedeNowurl));
exit();
}
if($cfg_dede_log==’Y’)
{ */
$s_nologfile = ‘_main|_list’;
$s_needlogfile = ‘sys_|file_’;
$s_method = isset($_SERVER[‘REQUEST_METHOD’]) ? $_SERVER[‘REQUEST_METHOD’] : ”;
$s_query = isset($dedeNowurls[1]) ? $dedeNowurls[1] : ”;
$s_scriptNames = explode(‘/’, $s_scriptName);
$s_scriptNames = $s_scriptNames[count($s_scriptNames)-1];
$s_userip = GetIP();
/* if( $s_method==’POST’ || (!preg_match(“#”.$s_nologfile.”#i”, $s_scriptNames) && $s_query!=”) || preg_match(“#”.$s_needlogfile.”#i”,$s_scriptNames) )
{
$inquery = “INSERT INTO `#@__log`(adminid,filename,method,query,cip,dtime)
VALUES (‘”.$cuserLogin->getUserID().”‘,'{$s_scriptNames}’,'{$s_method}’,'”.addslashes($s_query).”‘,'{$s_userip}’,'”.time().”‘);”;
$dsql->ExecuteNoneQuery($inquery);
}
} */
然后修改
xh_sys_data_done.php
把13行的引用改成我们新弄成的
require_once(dirname(__FILE__).’/xh_config.php’);
然后把后面的权限检查去掉
//CheckPurview(‘sys_Data’);
再替换一下文件名 把sys_data_done.php全替换成xh_sys_data_done.php
继续修改xh_sys_data_revert.php
前面是一样的
把13行的引用改成我们新弄成的
require_once(dirname(__FILE__).’/xh_config.php’);
然后把后面的权限检查去掉
//CheckPurview(‘sys_Data’);
然后我把这行引用给去掉
//include DedeInclude(‘templets/sys_data_revert.htm’);
后面加个?>结束PHP
然后打开templets\sys_data_revert.htm吧里面内容全复制到xh_sys_data_revert.php的刚才弄的?>后面
修改其中一个sys_data_done.php为xh_sys_data_done.php
就OK了
使用方法:
直接访问后台/xh_sys_data_revert.php开始还原吧
阅读全文