phper需要知道的mysql知识

group by[col1,col2,col3]

     将查询出来的数据根据col进行分组,简单理解就是将col1,col2,col3这三列数据相同的记录合成一条,col1,col2,col3因为是一样的很轻松就能合成一条并展示,那其他尾部的记录就可能每条都不一样无法合成,默认是取第一条的记录,或者可以用聚合函数处理3条不同的尾巴,比如求和,求平均然后在展示处理,如下:

order by[col1,col2,col3]

     order by也可以多个字段进行,先col1,排好以后,如果有相同的col1,再根据col2进行排序,同理col3,col也可以简化成1,2,3这种形式,对应select的第一个,第二个,第三个字段。

case….when….else….end

     用于加工查询出来的语句,将某一个字段的值进行修改加工

SELECT stud_id, sex=CASE gender
                      WHEN
’男’ THEN ’M’
                      WHEN
’女’ THEN ’F’

          ELSE  ‘F&M
                    END
FROM stud_info

 

select * from (select[col] from t) aliasname

     可以通过select查询构建一个临时表,表的字段就是select出来的col,注意后面必须加上这个临时表的名字。

on duplicate key update

     这个语句主要用在insert语句后面,当insert数据的时候发生唯一索引或者主键冲突的时候,就会对被冲突的那条原数据进行update操作,具体update什么就看你需要了。当然如果没有发生冲突,新数据就直接insert了。

group_concat & concat

     concat(str1,str2,str3),如selectconcat(name,sex,age) as info from t1 where id = 1。应该返回info->jamehollman18,注意没有分割符号的,如果str中只要有一个为空,那么返回就会为空。

     group_concat(col1,col2,col3),顾名思义,是在进行groupby时使用的,也是一个聚合函数,可以将之前说的冲突尾巴合成一个新建字段,并且字段之间自动会以”,”分割开。

(?=pattern) &(?<=pattern)

     这两个在正则上很重要!两者都是非捕获分组,与(?:pattern)性质一样,列如正则为/zhanhong,(?=hello)/,一个字符串为zhanhong,loveyou,因为zhanhong后面不是hello,所以zhanhong这个字符串不会匹配出来,相应zhanhong,hello就行,注意hello是不会匹配出来的,只是匹配(?=pattern)前面的字符,这个就叫正向预处理。(?!pattern)就与(?=pattern)相反

     第二个是反向的预处理,放在zhanhong前面/(?<=hello),zhanhong/,会匹配hello,zhanhong中的zhanhong,不会匹配其他的,相应的,还有/(?<!hello),zhanhong/。

(?:)是不会单独匹配,但是整个一起的时候它会参与被匹配展示,(?=)这一类更像是修饰作用,从来不会匹配到并展示出来

php建表等操作

     alter table tableaname change colname [datatype][null|not null] [default] , add [primary key(col) | indexindexname(col1,col2,col3) | unique indexname(col1,col2,col3)]

      insert table cloname[datatype] [null|not null] [default] , add [primarykey(col) | index indexname(col1,col2,col3) | unique indexname(col1,col2,col3)]

   creat table tablename (colname [datatype][null|not null] [default] , add [primary key(col) | indexindexname(col1,col2,col3) | unique indexname(col1,col2,col3)]

)


PDO

     代表 PHP 和数据库服务之间的一个连接,创建方式如下:new PDO($dsn$user$password);

最常用的就是他的事务处理beginTransactionPDO::commit ,PDO::rollBack 

这几个都是pdo类的静态函数。还有几个常用的函数:

这里着重讲下面几个:

PDO::exec    $obj->exec($sql);

     这个函数用于执行一条$sql语句,注意他只返回受影响的记录条数。所以select这种操作就只会返回0,所以尽量不要用返回值判断是否执行成功。

 

PDO::query

     这个函数执行一条sql语句,然后将结果集作为一个PDOstatement对象返回,打印的时候PDO对象只有一个queryString属性,内容是这条sql语句,但是遍历输出时却能打印出查询出来的数据,这里有一点疑惑。注意query出来的数据需要读完以后才能再使用query语句,如果不想读完,可以对PDOstatement使用PDOStatement::closeCursor() 函数。

 

PDO::prepare

     函数作用是预编译一条sql语句,返回PDOstatement对象,这一条sql语句可以使用参数绑定,也就是将值使用“?”或者“:varname_diy”代替,一条sql语句中只能选择其中一种样式来绑定。另外fetch等操作和execute操作都是PDOstatement的函数。

 

PDOstatement

     PDOstatement实例有两种来源,一个是PDO::query返回以及PDO::prepare返回。

 

PDOstatement::bindColumn

     将查询出来的数据字段分别复制给自己的变量,绑定需要在execute以后才能成功,绑定的时候有两种方式,一种是通过字段号,一种是根据字段名:

$sql = ‘SELECT name, colour, calories FROM fruit’;

$stmt $dbh->prepare($sql);
    
$stmt->execute();
    
$stmt->bindColumn(1$name);
    
$stmt->bindColumn(2$colour);

   $stmt->bindColumn('calories'$cals);

 

然后用fetch获取数据的时候就可以用自己的变量来输出了

    while ($row $stmt->fetch(PDO::FETCH_BOUND)) {
     
$data $name "\t" $colour "\t" $cals "\n";
      print 
$data;
    }

 

PDOstatement::bindParam

     用于绑定参数,如果占位符是“:varname”,那么第一个参数应该也是它,如果是“?”那么第一个参数是以1开始的序号:

$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);

$sth->bindParam(1$caloriesPDO::PARAM_INT);

注意这个函数第二个参数只能是一个变量,而不能是一个具体的值,bindValue就可以是值。第三个参数指定变量的类型,比如PDO::PARAM_STR等等。

 

PDOstatement::bindValue

     与上面类似,只是可以绑定具体的值,

 

PDOstatement::closeCursor

     上面已经提过,就是释放到数据库服务的连接,即时有未读完的数据仍然可以继续下一个查询。

 

PDOstatement::execute   bool PDOStatement::execute ([ array $input_parameters ] )

     执行编译过后的sql语句,也就是PDOstatement对象,除此之外,他也可以解决参数绑定的问题,不需要使用bindcolumn或者bindvalue,原因就是$input_parameters这个变量,对应的列子如下:

 

$sth->execute(array(':calories' => $calories':colour' => $colour));

$sth->execute(array($calories$colour));

 

sql中含有IN操作的解决办法

 

<?php
/*  使用一个数值执行一条含有 IN 子句的预处 */
$params = array(12163171);
/*  创建一个填充了和params相同数量占位符的字符串 */
$place_holders implode(','array_fill(0count($params), '?'));
/*
    
对于 $params 中的每个,要预处理的句包含足的未命名占位符 
    
语句被执行时, $params 中的定到预处句中的占位符。
    
这和使用 PDOStatement::bindParam() 不一,因它需要一个引用量。
    PDOStatement::execute() 
仅作为通过值绑定的替代。
*/
$sth $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
?>

 

PDOstatement::fetch

 

     PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT[, int $cursor_offset = 0 ]]])

     从一个 PDOStatement 对象相关的结果集中获取下一行。fetch_style 参数决定 POD 如何返回行。fetch_style默认是PDO::FETCH_BOTH,也就是不管以字段名返回,还要以序号返回,所以数组大了一倍。PDO::FETCH_ASSOC就是以字段返回的数组,更多类型看手册。PDO::FETCH_BOUND:返回 TRUE ,并分配结果集中的列值给 PDOStatement::bindColumn() 方法绑定的 PHP 变量。

 

PDOstatement::fetchAll

 

返回一个包含结果集中所有行的数组

     想要返回一个包含结果集中单独一列所有值的数组,需要指定 PDO::FETCH_COLUMN 。通过指定 column-index 参数获取想要的列。

 

PDOstatement::fetchColumn

     PDOStatement::fetchColumn ([ int $column_number = 0 ])

从结果集中下一行单独返回一个列的数据。

你想从行里取回的列的索引数字(以0开始的索引)。如果没有提供值,则 PDOStatement::fetchColumn() 获取第一列。

     如果使用 PDOStatement::fetchColumn() 取回数据,没有法返回同一行的另外一列

 

    

其他重要函数

 

特殊例子

<?php
/* 使用 INOUT 参数用一个存储过 */
$colour 'red';
$sth $dbh->prepare('CALL puree_fruit(?)');
$sth->bindParam(1$colourPDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT12);
$sth->execute();
print(
"After pureeing fruit, the colour is: $colour");
?>

 

更多预定义常量查看手册,至少熟悉常用的几个!!!

猜你喜欢

转载自blog.csdn.net/github_38392025/article/details/79057730