wget 命令不可用

mikel阅读(1826)

debian 或者 ubuntu : sudo apt-get install wget

centos : sudo yum -y install wget

前提是你得配置好了你得更新服务器,这个过程就稍微复杂些了,自己百度下 apt-get 或者 yum 的基本概念和使用方法吧。

Linux 删除文件夹和文件的命令_百度经验

mikel阅读(925)

来源: Linux 删除文件夹和文件的命令_百度经验

linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

工具/原料

  • Linux rm命令

方法/步骤

  1. 删除文件夹实例:
    rm -rf /var/log/httpd/access
    将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

  2. 删除文件使用实例:
    rm -f /var/log/httpd/access.log
    将会强制删除/var/log/httpd/access.log这个文件

    END

注意事项

  • 使用这个rm -rf的时候一定要格外小心,linux没有回收站的

    很多朋友在使用前没有看到这一点重要的提示信息,以至于删除之后再想找回就很难了

LuManager使用中典型问题整理集合 - 风尘守望者 - 博客园

mikel阅读(1130)

来源: LuManager使用中典型问题整理集合 – 风尘守望者 – 博客园

lumanager使用中典型问题整理集合
西门哥把遇到的问题尽量的做了一些整理供大家参考,帮上忙了支持下,大家有好贴希望拿来一起分享。
首先附上官方的基础FAQ:http://www.zijidelu.org/thread-2106-1-1.html

Q:使用LuManager之前请先了解几个概念,什么是LuManager?什么是Lunamp?什么是HttpOS?什么是ssh、putty、winscp?
A:LuManager(LUM):用来管理LuNamp的傻瓜化的虚拟主机,FTP,MySQL管理面板(快速记忆:Linux/Unix的管理者)zijidelu_install.tar.gz:这是一个用来自动化安装LuNamp和LuManager的脚本程序,一般用户只需下载这个就行了,LuNamp和LuManager的下载是自动进行的。LuNamp:LuNamp由Apache,Nginx,MySQL,Pure-Ftpd,Zend Optimizer等软件组成的自动化安装包。HttpOS一个基于CentOS的Linux发行版,全自动安装,集成了LUM。其他的百度或者google下吧。注意工具去官方下载小心汉化部分有安全隐患。

Q:安装LUM到一半,ssh断开了,怎么才能接着安装
A:重新执行命令系统会自动进行检测已安装然后执行未安装

Q: LUM理论支持所有的linux and unix我们推荐centos和debian
A: LUM已经做了最大兼容,各种客户均有,但是我们不建议过分纠结某个系统或版本,你的硬件也给你带来了杯具。

Q: LUM的内存占用多少?耗内存么
A:经过优化的lum配置可以将内存控制到60-70m 一般centos默认安装lum后初始内存好像通常也只有80-120m内存。若你非拿个128m内存配置用于生产环境…… 最简单的优化去后台-【系统管理】-【开机&关机等行为】可以关闭掉部分程序

Q:爱洞大是在火狐下调试开发的LUM面板,管理lum用浏览器时注意
A:老版搜狗浏览器会导致后台个别编辑时报错,360保存了自动填表或者帐号密码的个别版本中,(主要是自on个填表插件bug导致)其他暂无反馈,个别 错误记得清理浏览器缓存与cookie。搜狗最新版似乎已经解决,爱洞向搜狗浏览器开发部反馈过。360最新版带[登录管家]的个别会因为保存登录账户会 出现。

Q:不管是新安装还是升级lum,突然的异常报错,或者网站打不开,我经验推荐你先执行几个命令检查环境
A:ssh下执行lu-restart 查看有无异常,也就是说先看服务是否正常,后台清除缓存,更新网站检查网站错误,以及修复网站权限,检查下就会发现问题所在,当然我想经验丰富的很快就能定位问题,没条件支持命令刷新看下lum后台首页下方查看各个软件状态。

Q: Apache_LuManager 启动失败!Apache_LuManager was started failed.
Running: /usr/local/pureftpd/sbin/pure-ftpd -A -c50 -B -C5 -D
A: lu-repair -y  同时检查 8888端口被暂用。查看命令:netstat -an

Q:如何重新编译PHP(其他程序同理)
A:解压一下LuNamp_last.tar.gz
然后切换到LuNamp/code/php目录
再执行./php.sh便可(./php_LuManager.sh也是一样,其他程序同理)

Q:全新安装的LUM登陆提示:数据库lumanager不存在
A: lu-repair -y 然后lu-restart 或请重新用zijidelu_install.sh装一下.极少这种情况。

Q:登陆pm(phpmyadmin)后台报错
A:若你后台没有禁止只能登陆后台才能访问,出现报错首先对照两个config(下面有路径)的密码是否统一,若统一则执行
ln -s /usr/local/LuNamp/pm /usr/local/LuManager/pm

Q:系统发生错误    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ][ 错误信息 ]
Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
A:执行:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock   用mysql-restart看是否有错误提示,或者检查改一下home/lum_safe_files/config.php  or /usr/local/LuManager/Conf/config.php中的数据库连接密,当然你可以选择命令一键初始(mysql- reset_password 初始化mysql密码命令)你也可以看看http://www.zijidelu.org/thread-2679-1-1.html

Q: LuManager 怎么设置某些FTP用户只有下载而没有删除和上传的权限
A:直接在后台建FTP,在建的时候指定绝对目录到网站目录下,然后通过winscp上传文件(用root用户上传,不受权限影响),然后更改每一个 FTP目录的属主为daemon,用户权限为544(网站可以读文件和FTP用户都不能删除文件,只有daemon和root用户可以删除文件了)

Q:FTP不稳定是pureftpd1.0.32不稳定造成的,请经常使用FTP的用户升级到1.0.35即可
A:使用./LuNamp/code/pureftpd/pureftpd.sh进行升级即可. 即:LuNamp的code下的Pureftpd下面运行那个sh
或去官网www.pureftpd.org/project/pure-ftpd 下载安装pure-ftpd-1.0.35.tar.gz

Q:如何修改LUM后台的默认8888端口?

A:打开文件/usr/local/apache_LuManager/conf/httpd.conf把里面的8888改掉成您所需的端口,如果装有防火墙,再将防火墙的端口打开,然后apache_LuManager-restart

Q: LUM如何实现按天或者按周进行自动分割?
A: LUM的日志分割是任意配置的,请在任务计划中进行配。

Q: LUM的登录密码、保护密码、mysql密码pgsql密码等在哪里管理?
A: 一定要在【用户与密码】—密码管理—进行修改设置,别直接操作用户管理的密码然后,发现不能登录迷茫, 初次安装lum有提示的。

Q: 对环境不会优化,一窍不通。
A: 安装好先去开启下智能优化和修改下mysql连接数吧。基础详参很建议做些补习设置好。

Q: 缓存文件写入失败!:.//Runtime/Cache/d3ec9c68406519fa6f2eb840138e789f.php
A: 应该空间满了,清理文件腾出空间后,用zijidelu_install升级一下

Q: 用mysqladmin -u root -p password 修改密码后,lumanager不能登录,显示Access denied for user ‘root’@’localhost’ (using password: YES)
A: 用zijidelu_install升级一下

Q:如何访问日志文件
A: 日志文件在/home/hosts_log/下

Q:如何增加自定义的系统管理员?
A:编辑/usr/local/LuManager/Conf/config.php文件,设置一下SYSTEM_ADMIN_ID参数

Q: PHP的配置文件在哪儿放
A: 用phpinfo看若函数被禁止,shell下执行php -v或者find / -name php.ini

Q: LUM忘记了mysql密码或者数据库异常如何处理?
A: 依然首先建议重启mysql,ssh下用mysql-restart看是否有错误提示,若正常检查改一下home/lum_safe_files /config.php  or /usr/local/LuManager/Conf/config.php中的数据库连接密,当然你可以选择命令一键初始(mysql- reset_password 初始化mysql密码命令)或者http://www.zijidelu.org/thread-2300-1-1.html

Q: 在LUM和Linux下如何查看内存?
A:在lum后台有内存状态显示,linux我们一般用free命令和cat /proc/meminfo。

Q: LUM提示nginx未启动等常规处理方法?
A:nginx-restart,更新缓存—更新网站—检查网站错误—查找错误的内容—修改错误—ok,通常是配置的规则错误等引起。

Q:取消了其中一个域名的绑定 跟着网站就打不开了,LUM中重启了一下系统 现在连控制面板都进入不了
A:用ssh执行lu-restart 即可

Q:服务器的网络配置和DNS服务器修改
A:1、网卡配置vi /etc/sysconfig/network-scripts/ifcfg-eth0
2、DNS服务器修改vi /etc/resolv.conf.
3、后台【配置与优化】—【配置linux】—最下方进行dns修改

Q: LUM取消绑定还解析正常以及xx问题?
A:凡独立ip都会这样的,所有都是,只是个别你把默认网站删除或者关闭,而LUM的默认是排序最靠前的。我建议安装lum后新建一个空站排序设置少于默 认2000保持排序首位,这个十分必要,这样就有了你想要的效果,也防止别人恶意解析你ip,当然官也提供了更简单方案,在【配置优化】—【配置 lumanager】设置下未绑定不让访问

Q:安装好lum后装探针为何不显示cpu和内存等参数?
在LUM的系统管理中,编辑php.ini文件,将disable_functions参数的值去掉,变成
disable_functions =  或者切换到apahce下。(在LUM的后台,把禁用的函数去掉便可)

Q:忘记系统root密码怎么办?
lum后台【密码管理】可以修改root密码

Q:如何备份重装lumanager和重装系统后如何还原?
1. 备份/home(可以用tar打包)
2. 在新机器上装上LUM(mysql数据库版本必须相同)
3. 将新机器上的/home重命名为/home.bak(mv /home /home.bak)
4. 创建/home目录(mkdir /home)
5. 将备份的文件解压,并移动到/home目录下

Q:FTP无法链接
A:ssh登录执行pureftpd-restart重启,同时刷新查看lum后台首页下方提示的ftpd的状态
1. mysql或者pgsql的密码,不能是zijidelu
2. 保证FTP的密码正确(建议重新修改一次)
3. 在LUM后台重启一下pureftpd
4. 如果还是不行,请手动重启pureftpd(pureftpd-restart)

Q:升级后出现数据库连接错误时的修复方法
升级后,出现:Access denied for user ‘root’@’localhost’ (using password: YES)
错误提示2:数据库连接出错,请检查MySQL是否启动
A:修复办法:
打开/usr/local/LuManager/Conf/config.php
将数据库的root密码改成正确的,修改一下config.php中的连接密码,/usr/local/LuManager/Conf /config.php和/home/lum_safe_files/config.php都检查下,若密码忘记了,用phpMyAdmin将数据库的 root用户密码改成zijidelu保持config一致,登陆后台密码管理中,将数据库密码再改一次。初始化mysql密码命令mysql- reset_password

Q:LuManager登陆很慢
A:更换DNS,在LUM后台,配置linux系统,修改resolv.conf
nameserver 8.8.8.8
nameserver 208.67.222.222

Q:访问域名出现类似以下错误:Error messages: [Type] 查询语句错误[1036] Table ‘common_block’ is read only [Query] UPDATE common_block SET `dateline`=’1328099475′ WHERE `bid`=’65’
A:lu-repair如果不能解决,重启服务器应该可以解决了

Q:CDN加速是不是就是反向代理?
A:CDN可以说是反向代理和缓存的结合.

Q:查看FastCGI进程数
A:执行命令netstat -anpo | grep “php-cgi” | wc -l 查看进程数

Q:阿里云:Trying other mirror.Error: failure: repodata/primary.sqlite.bz2 from addons: [Errno 256] No more mirrors to try.
A:这是阿里云服务器上的bug,他们将源改成了盛大云,如果用163的就行了.

精华帖整理中
利用LUM强大的CDN功能创建网站CDN静态内容加速实例
http://www.zijidelu.org/forum-36-1.html LuManager基础教程区
http://www.zijidelu.org/forum-48-1.html 最小化安装系统视频教程区

Q: 网站经常出现502和504错误,该怎么办?
A: 这是由于页面执行时间超过1分钟造成的(正常情况下是不会发生的),如果要加大时间长,请在Nginx的扩展里(location段)添加以下三行

proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;

NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多。比如:如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间。
我将502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手:

1.FastCGI进程是否已经启动
2.FastCGI worker进程数是否不够
运行 netstat -anpo | grep “php-cgi” | wc -l 判断是否接近FastCGI进程,接近配置文件中设置的数值,表明worker进程数设置太少
3.FastCGI执行时间过长
根据实际情况调高以下参数值
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
4.FastCGI Buffer不够
nginx和apache一样,有前端缓冲限制,可以调整缓冲参数
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
5.Proxy Buffer不够
如果你用了Proxying,调整
proxy_buffer_size  16k;
proxy_buffers      4 16k;
6.https转发配置错误
正确的配置方法
server_name www.mydomain.com;
location /myproj/repos {
set fixeddestination

http_destination;
if ( httpdestination https(.)
)
{
set fixeddestinationhttp
1;
}
proxy_set_header Host host;proxysetheaderXRealIP
remote_addr;
proxy_set_header Destination $fixed_destination;
proxy_pass http://subversion_hosts;
}
Nginx 413错误的排查:修改上传文件大小限制
在上传时nginx返回了413错误,查看log文件,显示的错误信息是:”413 Request Entity Too Large”, 于是在网上找了下“nginx 413错误”发现需要做以下设置:
在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制;
如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。
post_max_size = 8M
upload_max_filesize = 2M
Nginx 400错误排查:HTTP头/Cookie过大
今天有人汇报nginx的HTTP400错误,而且这个HTTP400错误并不是每次都会出现的,查了一下发现nginx 400错误是由于request header过大,通常是由于cookie中写入了较长的字符串所引起的。
解决方法是不要在cookie里记录过多数据,如果实在需要的话可以考虑调整在nginx.conf中的client_header_buffer_size(默认1k)
若cookie太大,可能还需要调整large_client_header_buffers默认4k),该参数说明如下:
请求行如果超过buffer,就会报HTTP 414错误(URI Too Long)
nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

 

mysql修改时区的几种方法_懒人程序

mikel阅读(904)

select curtime();

来源: mysql修改时区的几种方法_懒人程序

说明:以下记录修改mySQL时区的几种方法。

具体:
方法一:通过mySQL命令行模式下动态修改
1.1 查看mysql当前时间,当前时区

> select curtime();   #或select now()也可以
+-----------+
| curtime() |
+-----------+
| 15:18:10  |
+-----------+

> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
#time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区

1.2 修改时区

> set global time_zone = '+8:00';  ##修改mysql全局时区为北京时间,即我们所在的东8区
> set time_zone = '+8:00';  ##修改当前会话时区
> flush privileges;  #立即生效

方法二:通过修改my.cnf配置文件来修改时区

# vim /etc/my.cnf  ##在[mysqld]区域中加上
default-time_zone = '+8:00'

# /etc/init.d/mysqld restart  ##重启mysql使新时区生效

方法三:如果不方便重启mysql,又想临时解决时区问题,可以通过php或其他语言在初始化mysql时初始化mysql时区
这里,以php为例,在mysql_connect()下使用mysql_query(“SET time_zone = ‘+8:00′”)。
这样可以在保证你不重启的情况下改变时区。但是mysql的某些系统函数还是不能用如:now()。这句,还是不能理解。

MySQL变量的定义与赋值 - 推酷

mikel阅读(871)

MySQL变量的定义与赋值

来源: MySQL变量的定义与赋值 – 推酷

变量可以在子程序(函数、存储过程、匿名块)中声明并使用,这些变量的作用范围是在BEGIN…END程序中。

定义变量

语法格式:

DECLARE var_name [, var_name]... data_type [ DEFAULT value ];

var_name为局部变量的名称;

DEFAULT value子句指定指定变量的默认值,value除了可以被声明为一个常量外,还可以被指定为一个表达式。如果没有DEFAULT子句,变量的初始值为NULL。

示例:

DECLARE myparam INT DEFAULT 100;

变量赋值

定义变量以后,为变量赋值可以改变变量的默认值。MySQL中使用SET语句为变量赋值。

在存储程序中的SET语句是一般SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量,如系统变量或者用户变量。

语法1:

SET var_name=expr [, var_name=expr]...;

示例1:

声明3个变量,分别为var1, var2和var3,数据类型为INT,使用SET为变量赋值

DECLARE var1, var2, var3 INT;
SET var1=10, var2=20;
SET var3=var1+var2;

语法2:SELECT INTO为变量赋值

SELECT INTO语法把选定的列直接存储到对应位置的变量。

MySQL中还可以通过SELECT…INTO为一个或者多个变量赋值,语法如下:

SELECT col_name[,...] INTO var_name[,...] table_expr [WHERE...];

示例2:

声明变量v_employee_name和v_employee_salary,通过SELECT…INTO语句查询指定记录并为变量赋值:

DECLARE v_employee_name VARCHAR(100);
DECLARE v_employee_salary DECIMAL(8,4);

SELECT employee_name, employee_salary
INTO v_employee_name, v_employee_salary
FROM employees
WHERE employee_id=1;

————————————————————————————————————————

如果您们在尝试的过程中遇到什么问题或者我的代码有错误的地方,请给予指正,非常感谢!

联系方式:david.louis.tian@outlook.com

版权@:转载请标明出处!

mysql中的字符串的拼接 - java初学者随记 - ITeye技术网站

mikel阅读(932)

来源: mysql中的字符串的拼接 – java初学者随记 – ITeye技术网站

字符串的拼接

1,MySQL

在Java、C#等编程语言中字符串的拼接可以通过加号“+”来实现,比如:”1″+”3″、”a”+”b”。
在MYSQL中也可以使用加号“+”来连接两个字符串,比如下面的SQL:

Sql代码  收藏代码
  1. SELECT ’12’+’33’,FAge+‘1’ FROM T_Employee

执行结果

Sql代码  收藏代码
  1. ’12’+’33’  FAge+‘1’
  2. 45    26
  3. 45  29
  4. 45  24
  5. 45  26
  6. 45  29
  7. 45  28
  8. 45  24
  9. 45  29
  10. 45  23

MYSQL会尝试将加号两端的字段值尝试转换为数字类型,如果转换失败则认为字段值为
0,比如我们执行下面的SQL语句:

Sql代码  收藏代码
  1. SELECT ‘abc’+‘123’,FAge+‘a’ FROM T_Employee

 

执行完毕我们就能在输出结果中看到下面的执行结果:

Html代码  收藏代码
  1. ‘abc’+’123′  FAge+’a’
  2. 123  25
  3. 123  28
  4. 123  23
  5. 123  25
  6. 123  28
  7. 123  27
  8. 123  23
  9. 123  28
  10. 123  22

在MYSQL中进行字符串的拼接要使用CONCAT函数,CONCAT函数支持一个或者多个参数,
参数类型可以为字符串类型也可以是非字符串类型,对于非字符串类型的参数MYSQL将尝试
将其转化为字符串类型,CONCAT函数会将所有参数按照参数的顺序拼接成一个字符串做为
返回值。比如下面的SQL语句用于将用户的多个字段信息以一个计算字段的形式查询出来:

Sql代码  收藏代码
  1. SELECT CONCAT(‘工号为:’,FNumber,‘的员工的幸福指数:’,FSalary/(FAge-21))

 

FROM T_Employee  执行完毕我们就能在输出结果中看到下面的执行结果:

Java代码  收藏代码
  1. CONCAT(‘工号为:’,FNumber,‘的员工的幸福指数:’,FSalary/(FAge-21))
  2. 工号为:DEV001的员工的幸福指数:2075.000000
  3. 工号为:DEV002的员工的幸福指数:328.685714
  4. 工号为:HR001的员工的幸福指数:1100.440000

MYSQL中还提供了另外一个进行字符串拼接的函数CONCAT_WS,
CONCAT_WS可以在待拼接的字符串之间加入指定的分隔符,它的第一个参数值为采用的分
隔符,而剩下的参数则为待拼接的字符串值,比如执行下面的SQL:

Sql代码  收藏代码
  1. SELECT CONCAT_WS(‘,’,FNumber,FAge,FDepartment,FSalary) FROM T_Employee

 

执行完毕我们就能在输出结果中看到下面的执行结果:

Java代码  收藏代码
  1. CONCAT_WS(‘,’,FNumber,FAge,FDepartment,FSalary)
  2. DEV001,25,Development,8300.00
  3. DEV002,28,Development,2300.80
  4. HR001,23,HumanResource,2200.88
  5. HR002,25,HumanResource,5200.36
  6. IT001,28,InfoTech,3900.00
  7. IT002,27,InfoTech,2800.00
  8. SALES001,23,Sales,5000.00
  9. SALES002,28,Sales,6200.00
  10. SALES003,22,Sales,1200.00

 

2,oracle

Oracle中使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。
比如执行下面的SQL语句:

Sql代码  收藏代码
  1. SELECT ‘工号为’||FNumber||‘的员工姓名为’||FName FROM T_Employee
  2. WHERE FName IS NOT NULL

 

执行完毕我们就能在输出结果中看到下面的执行结果:

Html代码  收藏代码
  1. 工号为||FNUMBER||的员工姓名为||FNAME
  2. 工号为DEV001的员工姓名为Tom
  3. 工号为DEV002的员工姓名为Jerry
  4. 工号为SALES001的员工姓名为John
  5. 工号为SALES002的员工姓名为Kerry
  6. 工号为SALES003的员工姓名为Stone
  7. 工号为HR001的员工姓名为Jane
  8. 工号为HR002的员工姓名为Tina
  9. 工号为IT001的员工姓名为Smith

除了“||”,Oracle还支持使用CONCAT()函数进行字符串拼接,比如执行下面的SQL语句:

Sql代码  收藏代码
  1. SELECT CONCAT(‘工号:’,FNumber) FROM T_Employee

 

执行完毕我们就能在输出结果中看到下面的执行结果:

Html代码  收藏代码
  1. CONCAT(工号:,FNUMBER)
  2. 工号:DEV001
  3. 工号:DEV002
  4. 工号:HR001
  5. 工号:HR002
  6. 工号:IT001
  7. 工号:IT002
  8. 工号:SALES001
  9. 工号:SALES002
  10. 工号:SALES003

如果CONCAT中连接的值不是字符串,Oracle会尝试将其转换为字符串,

与MYSQL的CONCAT()函数不同,Oracle的CONCAT()函数只支持两个参数,不支持两个以
上字符串的拼接。如果要进行多个字符串的拼接的话,可以使用多个CONCAT()函数嵌套使用。

Sql代码  收藏代码
  1. SELECT CONCAT(CONCAT(CONCAT(‘工号为’,FNumber),‘的员工姓名为’),FName) FROM
  2. T_Employee
  3. WHERE FName IS NOT NULL

 

执行完毕我们就能在输出结果中看到下面的执行结果:

Html代码  收藏代码
  1. CONCAT(CONCAT(CONCAT(工号为,FNUMBER),的员工姓名为),FNAME)
  2. 工号为DEV001的员工姓名为Tom
  3. 工号为DEV002的员工姓名为Jerry
  4. 工号为SALES001的员工姓名为John
  5. 工号为SALES002的员工姓名为Kerry
  6. 工号为SALES003的员工姓名为Stone
  7. 工号为HR001的员工姓名为Jane
  8. 工号为HR002的员工姓名为Tina
  9. 工号为IT001的员工姓名为Smith

MySQL字符串连接函数

mikel阅读(901)

MySQL中 concat 函数
使用方法:
CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

注意:
如果所有参数均为非二进制字符串,则结果为非二进制字符串。
如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如:
SELECT CONCAT(CAST(int_col AS CHAR), char_col)

MySQL的concat函数可以连接一个或者多个字符串,如
mySQL> select concat(’10’);
+————–+
| concat(’10’) |
+————–+
| 10   |
+————–+
1 row in set (0.00 sec)

mysql> select concat(’11’,’22’,’33’);
+————————+
| concat(’11’,’22’,’33’) |
+————————+
| 112233 |
+————————+
1 row in set (0.00 sec)

MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
mysql> select concat(’11’,’22’,null);
+————————+
| concat(’11’,’22’,null) |
+————————+
| NULL   |
+————————+
1 row in set (0.00 sec)

MySQL中 concat_ws 函数
使用方法:
CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

如连接后以逗号分隔
mysql> select concat_ws(‘,’,’11’,’22’,’33’);

+——————————-+
| concat_ws(‘,’,’11’,’22’,’33’) |
+——————————-+
| 11,22,33 |
+——————————-+
1 row in set (0.00 sec)

和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL
mysql> select concat_ws(‘,’,’11’,’22’,NULL);
+——————————-+
| concat_ws(‘,’,’11’,’22’,NULL) |
+——————————-+
| 11,22 |
+——————————-+
1 row in set (0.00 sec)

MySQL中 group_concat 函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

基本查询

mysql> select * from aa;
+——+——+
| id| name |
+——+——+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200   |
|3 | 500   |
+——+——+
6 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔(默认)

mysql> select id,group_concat(name) from aa group by id;
+——+——————–+
| id| group_concat(name) |
+——+——————–+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+——+——————–+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,分号分隔

mysql> select id,group_concat(name separator ‘;’) from aa group by id;
+——+———————————-+
| id| group_concat(name separator ‘;’) |
+——+———————————-+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500   |
+——+———————————-+
3 rows in set (0.00 sec)

以id分组,把去冗余的name字段的值打印在一行,

逗号分隔

mysql> select id,group_concat(distinct name) from aa group by id;
+——+—————————–+
| id| group_concat(distinct name) |
+——+—————————–+
|1 | 10,20|
|2 | 20   |
|3 | 200,500 |
+——+—————————–+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

mysql> select id,group_concat(name order by name desc) from aa group by id;
+——+—————————————+
| id| group_concat(name order by name desc) |
+——+—————————————+
|1 | 20,20,10   |
|2 | 20|
|3 | 500,200|
+——+—————————————+
3 rows in set (0.00 sec)

repeat()函数

用来复制字符串,如下’ab’表示要复制的字符串,2表示复制的份数

mysql> select repeat(‘ab’,2);

+—————-+
| repeat(‘ab’,2) |
+—————-+
| abab           |
+—————-+

1 row in set (0.00 sec)

又如
mysql> select repeat(‘a’,2);

+—————+
| repeat(‘a’,2) |
+—————+
| aa            |
+—————+
1 row in set (0.00 sec)
mysql向表中某字段后追加一段字符串:
update table_name set field=CONCAT(field,”,str)

mysql 向表中某字段前加字符串
update table_name set field=CONCAT(‘str’,field)

本文来自http://hi.baidu.com/%CE%F7%BA%FE%B5%C0%B3%A4/blog/item/55b69cddf994de1862279844.html

使用ThinkPHP框架快速开发网站(多图) - ruby97的专栏 - 博客频道 - CSDN.NET

mikel阅读(907)

 

来源: 使用ThinkPHP框架快速开发网站(多图) – ruby97的专栏 – 博客频道 – CSDN.NET

使用ThinkPHP框架快速搭建网站

 

这一周一直忙于做实验室的网站,基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助,那就更好了挖。

以前用PHP做过一个很蹩脚的网站,为什么这么说呢,因为写的全是死代码。做完以后觉得实在是累,前端要div+css,js 后端要php,mySQL,这么多东西要弄,十分头疼。所以,在接到做网站的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟以前一样那么累了。

我选择的是PHP的ThinkPHP框架。说实话,真的蛮不错的。瞬间觉得Web开发还是蛮有效率的。

超级链接:ThinkPHP中文网

按照套路,首先贴一下实验环境:

  • 1.    WAMP(集成的那种,最Easy的几乎不需要配置)
  • 2.    ZendStudio7.2(中文网址http://www.zendstudio.net/,里面提供下载,在线注册机以及使用教程)
  • 3.    ThinkPHP框架+百度UEditor编辑器插件
  • 4.    Win7-64bit操作系统
  • 5.    浏览器(火狐,IE,Chrome),外加火狐FireBug插件用于调试以及偷样式

————————————————————-华丽分割————————————————————-

第一步:找网页模板(不会美工,PS,见谅。。)

前端页面我找的是一个大学的实验室,这里就不贴了,很普通的那种。后台直接下载的模板,感觉蛮漂亮的,运行后如下图:

第二步:初识百度UEditor插件

由于我要做的是实验室的网站。实验室网站主要内容在如下几个方面:

  • 介绍实验室的成员
  • 实验室的项目,成果等
  • 实验室的新闻以及学术交流信息

可见,信息主要偏重于后台的新闻,文章信息的发布,而前台几乎不存在编辑。所以重点要在后台实现一个方便的文章发布体系

我选用了百度出品的UEditor所见即所得编辑器。主要是JS实现的,整合到后台后如下所示,功能真的很多哇:

关于UEditor的如何整合到网站中,请参考UEditor的官网,里面有详细教程。

第三步:初识ThinkPHP框架

下面开始介绍ThinkPHP框架,首先为了加强感性认识,先看一看ThinkPHP工程的目录结构:

文件夹:

  • admin是后台工程文件夹
  • home是前台工程
  • public里面用于存放CSS文件,JS文件以及网页里面的图片
  • ThinkPHP框架
  • ueditor是百度编辑器

 

下面三个PHP文件:

  • admin.php是后台工程的入口文件,
  • index.php是前台工程的入口文件。
  • config.inc.php,由于这个小项目的几乎所有数据都放在数据库里,而前后台都要连接数据库,所以所有的数据库配置代码放在了它里面。

而剩下的buildpath ,.settings , .project 是Zend IDE生成的,不管它们。

——————————————————华丽分割————————————————————-

由于我这里面实际是两个工程(home和admin),只要理解其中一个即可,故下面只介绍后台,即admin部分

接着往下看,看一下admin.php文件,这是需要了解的第一个文件,即后台的入口文件

几个宏定义分别指明了:

  • 1.    ThinkPHP框架的路径
  • 2.    后台应用程序目录
  • 3.    后台应用程序名称
  • 4.    开启调试模式
  • 5.    包含ThinkPHP框架下的ThinkPHP.php文件(重要!

 

下面新建一个小工程来演示一下开发过程:

比如整个工程的大目录是xxx,然后把ThinkPHP框架拷贝进来,并添加admin.php文件(如上图中的代码)

此时在浏览器里面输入:http://localhost/xxx/admin.php自动生成admin目录,如下图

打开admin目录,内容如下:

其中主要关注四个文件夹:

1.    Conf 存放工程配置文件(比如定义一些常量什么的)

2.    Lib   (最重要!存放MVC模式中的模型类和控制器类)

3.    Tpl(存放模板文件,按道理前面我们下载的模板应该放在这里)

4.    Runtime(存放运行时文件,比如缓存啊,数据库表缓存什么的)

最后贴出浏览器上的运行结果。。对不起贴的有点晚。

如果能看到上面的画面,说明ThinkPHP可以正常运行啦。下面我们继续完善吧。

————————————————————华丽分割—————————————————–

第四步:初识MVC模式

到这里,不得不提一下在ThinkPHP中的MVC的概念。MVC很有名,叫做模型-视图-控制器模式。

 

在ThinkPHP里面:

模型(Model)可以认为就是一张数据库表。那我做的工程来说:

对于一篇文章(新闻),它的属性包括ID号,标题,作者,创建时间,最后修改时间以及文章内容。这就是一篇文章的模型。然后就按照这个思路建立对应的数据库表:

 

视图(View)可以认为就是用户看到的东西,即模板,或者说皮肤。

比如前面贴出的后台模板,那个在ThinkPHP概念中就是视图。

 

控制器(Action)可以认为是视图与模型之前的桥梁。因为网站上显示的内容基本全部来自众多模型们(数据库表们),而控制器负责的就是决定在哪些情况下显示哪些模型里面的哪些数据。还是拿我的例子说,我后台工程的首页对应的控制器是Index控制器。(Index控制器为所有工程的默认控制器)。但是你想,一个网站的首页一般是有很多按钮啊,超链接啊什么的,可以跳到其他地方去的东西。贴张图:

 

这是我的后台首页。可以看到左边有导航栏,右下边列出了数据库当前的文章信息,可以看到一共有三篇文章。比如我现在可能想做:

1.    把文章”1111测试文章发布系统”删除

2.    把文章”詹姆斯高捧第3座MVP奖杯”改成”詹姆斯高捧第4座MVP奖杯”

3.    新添加一篇别的文章

这就对应了Index控制器的不同功能了,也就是Index控制器类IndexAction的不同方法(比如取名edit()方法,delete()方法,add()方法)。当然之所以会看到页面显示,是因为默认情况下执行Index控制器的Index()方法,在该方法中调用display()方法显示模板(视图)。不信可以看默认的文件,里面的Index控制器的Index方法实现的就是HelloThinkPHP的欢迎页面。

比如:

IndexAction目录为:

/xxx/admin/Lib/Action/IndexAction.class.php

内容为:

可以看到,默认情况下在index方法中调用了$this->display()

(注意看IndexAction 继承Action类,display方法是Action类的方法);

调用display()方法后,ThinkPHP会在对应工程的Tpl文件夹下的Index文件下下找index.html文件。其中前一个Index文件夹对应的是Index控制器,index.html对应的是index()方法。

所以,一个控制器类对应一个模板文件夹。具体对应多少个模板跟控制器类有多少个方法以及有多少个方法需要display有关。

故,此时对应的模板文件路径为:

/xxx/admin/Tpl/Index/index.html

 

细心的朋友可能要问了,你这里只说了视图(模板)和控制器啊,模型呢?你是怎么知道数据库里的那三篇文章的信息的呢?其实不然,我在index方法里面还做了一些事情,下图是精简版index方法:

可以看到,第一步,我就实例化了一个模型。模型名字是Article,前面说到模型就是数据库表,此时查看一下有哪些数据库表:

第一个表名字是think_article,可以看到还差一个前缀think_,其实这个是在配置文件中指定的,还记得前文所述的config.inc.php吗? 其配置代码如下所示:

<?php

return array(

     ‘DB_TYPE’              =>’mySQL’,

     ‘DB_HOST’             =>’localhost’,

     ‘DB_NAME’            =>数据库名字,

     ‘DB_USER’             =>用户名,

     ‘DB_PWD’              =>密码,

     ‘DB_PORT’             =>’3306′,

     ‘DB_PREFIX’           =>’think_’,

);

?>

第二条语句就是查询数据库。ThinkPHP提供了很多种查询数据库的方法,我使用的是连贯操作法。

执行完第二条语句后$new_list变量就存储了所有文章的信息,那么怎么把它显示到界面上去呢?

看第三句话,它把该 变量分配给了一个叫做’new_list’的变量  (好像同名了哇。。不过没关系,关键是assign方法),然后我们在模板文件里面进行替换就OK啦。默认情况下,在HTML里面写 {$new_list}就OK啦。当然,这里面的new_list是一个复合的变量,不是单纯的数字或者字符串。。不过ThinkPHP提供了很多循环的 方法给我们使用,很是方便。

最后一条语句就是显示对应的视图文件了。我们就能把数据库中的文章信息按照视图(模板)里面定义的规则显示在浏览器中了。

—————————————————————华丽分割———————————————————–

源码下载

最后给出示例工程xxx的源码。有需要的朋友可以下载,可以很快的了解ThinkPHP的大概原理。

源码功能:

  • 1.后台管理员登陆
  • 2.添加文章,编辑文章,删除文章
  • 3.前台显示文章

使用方法:

  • 1.解压到网站根目录下,默认是www文件夹下的xxx文件夹

  • 2.在MySQL中新建一个数据库,比如rubydb,整理成utf8-genaral-ci
  • 3.导入数据库表文件夹下的两个数据库表 think_article 和think_user,导入后入下图:

  • 4.配置Config.inc.php文件
  1. <span style=“font-size:16px;”><?php
  2. return array(
  3.     ‘DB_TYPE’           =>   ‘mysql’,
  4.     ‘DB_HOST’           =>   ‘localhost’,
  5.     ‘DB_NAME’           =>   ‘自己建一个数据库’,//需要新建一个数据库!名字叫
  6.     ‘DB_USER’           =>   ‘你的数据库用户名’,     //数据库用户名    
  7.     ‘DB_PWD’            =>   ‘你的数据库密码’,//数据库登录密码
  8.     ‘DB_PORT’           =>   ‘3306’,
  9.     ‘DB_PREFIX’     <span style=“white-space:pre”>  </span>=>    ‘think_’,//数据库表名前缀
  10. );
  11. ?></span>

可见,上面的DB_NAME,DB_USER,DB_PWD需要修改

分别是

‘DB_NAME’=>’rubydb’ ,

‘DB_USER’  =>’你的mysql登录账号’ ,

‘DB_PWD’   =>’你的mysql登录密码’

  • 5.运行 http://localhost/xxx/admin.php,弹出后台登录页面:

输入数据库think_user里面的用户信息: ruby97,密码ruby97  ,再输入验证码即可登录。

选择写新闻按钮,自己添加一篇文章。然后到http://localhost/xxx下面看结果吧!

源码下载链接