MySQL SQL 语法总结

1、建表格:?
create table table_name(
column1 datatype [not null] [not null primary key],
column2 datatype [not null],
…);
说明:
datatype –是资料的格式,详见表。
nut null –可不可以允许资料有空的(尚未有资料填入)。
primary key –是本表的主键。

2、更改表格 
alter table table_name
add column column_name datatype
说明:增加一个栏位(没有删除某个栏位的语法。
alter table table_name
add primary key (column_name)
说明:更改表得的定义把某个栏位设为主键。
alter table table_name
drop primary key (column_name)
说明:把主键的定义删除。

3、建立索引
create index index_name on table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。

4、删除 ?
drop table_name
drop index_name

5、数据类型 datatypes?
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5;

s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。

6、数据库DML(data manipulation language)?
●增加资料:
insert into table_name (column1,column2,…)
values ( value1,value2, …)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。

insert into table_name (column1,column2,…)
select columnx,columny,… from another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。

●查询资料:
基本查询
select column1,columns2,…
from table_name
说明:把table_name 的特定栏位资料全部列出来
select * from table_name
where column1 = xxx
[and column2 > yyy] [or column3 <> zzz]
说明:
1.’*’表示全部的栏位都列出来。
2.where 之後是接条件式,把符合条件的资料列出来。

select column1,column2
from table_name
order by column2 [desc]
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列

●组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。
select *
from table1,table2
where table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。

●整合性的查询:
select count (*)
from table_name
where column_name = xxx
说明:
查询符合条件的资料共有几笔。
select sum(column1)
from table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。
select column1,avg(column2)
from table_name
group by column1
having avg(column2) > xxx
说明:
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字
一起使用。
2.having : 必须和 group by 一起使用作为整合性的限制。

●复合性的查询
select *
from table_name1
where exists (
select *
from table_name2
where conditions )
说明:
1.where 的 conditions 可以是另外一个的 query。
2.exists 在此是指存在与否。
select *
from table_name1
where column1 in (
select column1
from table_name2
where conditions )
说明:
1. in 後面接的是一个集合,表示column1 存在集合里面。
2. select 出来的资料形态必须符合 column1。

●其他查询
select *
from table_name1
where column1 like ‘x%’
说明:like 必须和後面的’x%’ 相呼应表示以 x为开头的字串。
select *
from table_name1
where column1 in (‘xxx’,’yyy’,..)
说明:in 後面接的是一个集合,表示column1 存在集合里面。
select *
from table_name1
where column1 between xx and yy
说明:between 表示 column1 的值介於 xx 和 yy 之间。

7、更改资料:?
update table_name
set column1=’xxx’
where conditoins
说明:
1.更改某个栏位设定其值为’xxx’。
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。

8、删除资料:?
delete from table_name
where conditions
说明:删除符合条件的资料。

说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是access数据库,则为:where mydate>#2000-01-01#
(2)如果是oracle数据库,则为:where mydate>cast(‘2000-01-01’ as date)
或:where mydate>to_date(‘2000-01-01′,’yyyy-mm-dd’)
在delphi中写成:
thedate=’2000-01-01′;
query1.sql.add(‘select * from abc where mydate>cast(‘+””+thedate+””+’ as date)’);

如果比较日期时间型,则为:
where mydatetime>to_date(‘2000-01-01 10:00:01′,’yyyy-mm-dd hh24:mi:ss’);
 

MySql错误No database selected

今天学习ThinkPHP中看到一段测试代码,执行一直是错误,好多,代码如下:
CREATE TABLE `think_demo` (
`id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default ”,
`content` longtext NOT NULL,
PRIMARY KEY? (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

然后我就只执行第一句:CREATE TABLE `think_demo`
还是错误,应该不是代码问题了,那就是我执行代码的问题了,操作有错误,用的PHPmyadmin,没错的。
然后执行上面一句代码,查看错误信息提示:No database selected
原因是没有选择数据库,选择一个数据库问题就解决了。
<a style=”color: red;” href=”http://www.0535code.com/”>www.0535code.com</a> 我的学习博客欢迎大家一起学习哦,最近业余学习ThinkPHP框架中。。。

Dedecms 360网站安全卫士100%漏洞修复

Dedecms 360网站安全卫士100%漏洞修复,按照官方的程序是100%的安全的,昨天去版权后360网站卫士提示有sql漏洞,是因为只注释掉加密字符串,后面的特殊操作一起注释掉就会100%安全了,不在提示sql注册漏洞了。

/*
$arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79);
$arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72,
0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20,
0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e);

//特殊操作
if(isset($GLOBALS[‘arrs1’]))
{
$v1 = $v2 = ”;
for($i=0;isset($arrs1[$i]);$i++)
{
$v1 .= chr($arrs1[$i]);
}
for($i=0;isset($arrs2[$i]);$i++)
{
$v2 .= chr($arrs2[$i]);
}
$GLOBALS[$v1] .= $v2;
}

*/

为什么会这样呢?后面的特殊操作看起来像是解密程序。本地运行了下结果,就是版权了。如下图:

Dedecms版权

phpweb Fatal error: Cannot redeclare class pages in

phpweb Fatal error: Cannot redeclare class pages in 0 … 错误解决方案:
标题带有翻页或检索的插件每页只能放置一个,否则会导致页面出错,该页报错无法访问,出现Fatal?error:?Cannot?redeclare?class?pages错误!
页面添加插件后提示Fatal?error:?Cannot?redeclare?class?pages的解决办法
进入ftp,找到页面所属模块的文件夹,如地址栏是product/class,文件夹就是product,更名product下的module文件夹下的ProductGlobalQuery.php,文章的就是?news下的module下的NewsGlobalQuery.php文件。?然后进入排版状态,删除带翻页插件(插件名字带检索或翻页)至只剩一个,将先前更名过的文件夹名字改回即可。

Snoopy.class.php 批量提交表单代码

<?php
include "Snoopy.class.php";
$snoopy = new Snoopy;

$submit_url = "http://ssptp.com/order/submit.php";    //提交url ,下面是一个数组存放提交内容
$submit_vars["client_name"] = "去你妹!";
$submit_vars["telephone"] = "去你妹!";
$submit_vars["client_address"] = "去你妹!";
$submit_vars["client_qq"] = "去你妹!";
$submit_vars["buy_num"] = "1";
$submit_vars["pay_type"] = "1";
$submit_vars["remark"] = "去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!去你妹!";

for($i=0;$i<=100;$i++){
  if($snoopy->submit($submit_url,$submit_vars)){
 echo "第".$i."次执行成功!"."<br />";
  }
}
 
?>

Thinkphp 去掉index.php详细步骤

1、在Apache-20\conf文件夹下找到httpd.conf配置文件 搜索mod_rewrite.so模块 去掉前面的‘#’号;
2、在httpd.conf配置文件中搜索
Options FollowSymLinks
AllowOverride None
将第一行的Options FollowSymLinks改为AllowOverride ALL 即:
AllowOverride ALL
AllowOverride None
3、在Thinkphp项目配置文件里面添加配置: ‘URL_MODEL’ => ‘2’,
4、用editplus或者其他工具创建.htaccess文件,保存内容为:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

ThinkPHP构造函数与前后置方法执行顺序

在使用ThinkPHP过程中,保存了Session作为公共类,提供其他类继承,公共类使用前置方法_before_index最session进行了判断,发现其他模块不用通过session就可以直接进入了,如果别人知道action中类的方法就可以直接打开了,这种验证是不健全的,前置方法和后置方法不是构造函数与析构函数,想使用构造函数还是要用php原生的构造与析构函数,或者内置提供的。简单的测试了一下前置方法和后置方法与index的执行顺利和作用域。前置方法和后置方法与index方法的作用域仅限当前方法,而构造函数适用于整个类。

__Construct() 或者 _initialize 为构造函数,在整个类文件中都是有作用域,就是每一个方法都会去验证。而前置和后置与index方法只会验证当前方法。

前置方法与后置方法与index方法官方有文档有写过执行顺序:

_before_index()  //前置方法;
index() //默认第一个执行方法;
_after_index() // 后置方法。