php操作mysql时 数组不用引号_PHP使用PDO操作mysql

1.pdo连接数据库(初始化):

$pdo=new PDO("mysql:host=localhost;dbname=库名","用户名","密码");

2.执行增删改:

$res=$pdo->exec("增删改的操作语句");

返回的是影响条数,如果没影响返回0

$id=$pdo->lastInsertId();

获取最后一条插入的id

3.执行查询

$obj=$pdo->query("select * from A");

遍历该$obj对象可获取数据

4.预处理

$pdoStm=$pdo->prepare($sql);

$res=$obj->execute();    //返回bool

$pdoStm->fetch(PDO::FETCH_ASSOC);    //获取查询结果中的一行,要配合while

$pdoStm->fetchAll(PDO::FETCH_ASSOC);    //获取所有数据,是个二维数组

$pdoStm->setFetchMode(PDO::FETCH_ASSOC);    //设置获取数据的形式是关联数组

5.占位符的使用

a.

$sql="select * from user where name=:name and password=:password";    //占位符不用加引号

$pdoStm=$pdo->prepare($sql);

$pdo->execute([':name'=>xxx,':password'=>xxx]);

另一种形式的占位符

使用占位符可以解决sql注入的问题

$sql="select * from user where name=? and password=?";

$pdoStm=$pdo->prepare($sql);

$pdo->execute([xxx,xxx]);

b.使用bindParam()方法绑定参数到占位符

$sql="insert into user values (null,:name,:password);

$pdoStm=$pdo->prepare($sql);

$pdoStm->bindParam(":name",$name,PDO::PARAM_STR);

$pdoStm->bindParam(":password",$password,PDO::PARAM_STR);

$name="aaa";

$password="bb";

$pdoStm->execute();

//如果还想插入一条数据

$user="xxx";

$password="mm";

$pdoStm->execute();

使用?占位则$pdoStm->bindParam(1,$user);$pdoStm->bindParam(2,$password);

bindValue()用法和bindParam()一样,区别是后者是引用传值,传给占位符的值必须是变量不能是值

而bindValue()可以是值,它不是引用传值的机制

$pdoStm->bindParam(":name","zbp"); 是错的

6.错误信息

$pdo->errorInfo()

或者

$pdoStm->errorInfo()

返回的是一个索引数组,第一个元素是错误码,00000表示没有错误;第二个元素是错误信息

最后贴出来一个自定义的PDO类:

class PdoMysql

{

private static $config=[];//设置配置信息

private static $link=null;//保存链接标识符

private static $PDOStatement=null;//保存PDOStatement对象

private static $queryStr='';//保存最近一条sql语句

private static $error='';//保存错误信息

private static $lastInsertId=0;//保存最后一条插入的ID

private static $effectedRow=0;//保存增删改时,受影响条数

public function __construct($configPath,$dbConfig=""){

if(!class_exists("PDO")){

self::throw_exception("不支持PDO,请先开启");

}

if(!empty($configPath)){

require($configPath);

$dbConfig=[

"username"=>DB_USER,

"password"=>DB_PWD,

"dsn"=>DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME

];

}

self::$config=$dbConfig;

if(!self::$link){//单例模式

$configs=self::$config;

try{

self::$link=new PDO($configs['dsn'],$configs['username'],$configs['password']);

}catch(PDOException $e){

self::throw_exception($e->getMessage());

}

if(!self::$link){

self::throw_exception("PDO连接错误");

return false;

}

// self::$link->exec("set character_set_server=".DB_CHARSET);//这一句的含义是建表的时候,表是utf8还是gbk,一般在php中操作数据库时,表已经建好,所以没必要使用这句话

self::$link->exec("set names ".DB_CHARSET);//这句是写入数据的时候,写入的是utf8的数据还是gbk的

}

}

/*

*获取所有记录

*/

public static function getAll($sql=null){

if($sql){

self::query($sql);

$res=self::$PDOStatement->fetchAll(PDO::FETCH_ASSOC);

return $res;

}

self::throw_exception("sql语句为空");

return false;

}

/*

*获取一条记录

*/

public static function getRow($sql=''){

if($sql){

self::query($sql);

$res=self::$PDOStatement->fetch(PDO::FETCH_ASSOC);

return $res;

}

self::throw_exception("sql语句为空");

return false;

}

/*

*根据主键查询

*/

public static function findById($table,$id,$fields='*'){

$sql="select %s from %s where id=%d";

$sql=sprintf($sql,self::parseFields($fields),$table,$id);

return self::getRow($sql);

}

/*

*根据条件查询

*/

public static function find($table,$fields='*',$condition=['where'=>'','group'=>[],'having'=>'','order'=>'',"limit"=>[]]){

$sql='select '.self::parseFields($fields).' from '.$table;

if(!empty($condition['where'])){

$sql.=self::where($condition['where']);

}

if(!empty($condition['group'])){

$sql.=self::group($condition['group']);

}

if(!empty($condition['having'])){

$sql.=self::having($condition['having']);

}

if(!empty($condition['order'])){

$sql.=self::order($condition['order']);

}

if(!empty($condition['limit'])){

$sql.=self::limit($condition['limit']);

}

$res=self::getAll($sql);

return $res;

}

/*

*$data为键值对数组

*/

public static function add($table,$data=[]){

if(!$data){

self::throw_exception("传入数据不可为空");

return false;

}

foreach($data as $k=>$v){

$key[]='`'.$k.'`';

$value[]="'".$v."'";

}

$sql="insert into {$table} (".implode(",",$key).") values (".implode(",",$value).")";

$res=self::execute($sql);

return $res;

}

/*

*更新数据,要有条件:update 表明 set xxx='xxx',... where ...

*/

public static function update($table,$data=[],$where=''){

if(!$data){

self::throw_exception("传入数据不可为空");

return false;

}

$dataStr="";

foreach($data as $k=>$v){

$dataStr.="`".$k."`='".$v."',";

}

$dataStr=rtrim($dataStr,",");

$sql="update {$table} set ".$dataStr.self::where($where);

$res=self::execute($sql);

return $res;

}

/*

*删除数据,要有条件

*/

public static function delete($table,$where=''){

if(!$where){

self::throw_exception("删除数据必须有条件");

return false;

}

$sql="delete from {$table} ".self::where($where);

$res=self::execute($sql);

return $res;

}

/*

*获取插入的最后一条的id

*/

public static function getLastInsertId(){

return self::$lastInsertId;

}

/*

*获取总记录数

*/

public static function getRowNum($table){

$sql="select count(*) from {$table}";

$num=self::$PDOStatement->fetchColumn(0);

return $num;

}

/*

*用于完成查询操作

*/

public static function query($sql=''){

$link=self::$link;

//判断之前是否有结果集,如果有则释放一下结果集

if(!empty(self::$PDOStatement)){

self::free();

}

self::$queryStr=$sql;

self::$PDOStatement=$link->prepare(self::$queryStr);

$res=self::$PDOStatement->execute();

self::haveErrorThrowException();

return $res;

}

private static function parseFields($fields){

if(is_array($fields)){

foreach($fields as $k=>$v){

$fields[$k]="`".$v."`";

}

$fieldsStr=implode(',',$fields);

}else{

if(!$fields){

$fields="*";

}

$fieldsStr=$fields;

}

return $fieldsStr;

}

/*

*$where只允许是字符串

*/

private static function where($where=''){

$whereStr="";

if(is_string($where) && trim($where)){

$whereStr=" where ".$where;

}

return $whereStr;

}

/*

*$group可以是字符串或者数组

*/

private static function group($group=[]){

$groupStr="";

if(is_array($group) && count($group)){

$groupStr=" group by ";

foreach($group as $k=>$v){

$group[$k]="`".$v."`";

}

$groupStr.=implode(",",$group);

}elseif(is_string($group) && trim($group)){

$groupStr=" group by ".$group;

}

return $groupStr;

}

/*

*having只允许是字符串

*/

private static function having($having=''){

$havingStr="";

if(is_string($having) && trim($having)){

$havingStr=" having ".$having;

}

return $havingStr;

}

/*

*$order只允许是字符串

*/

private static function order($order=''){

$orderStr="";

if(is_string($order) && trim($order)){

$orderStr=" order by ".$order;

}

return $orderStr;

}

/*

*$limit可以是字符串或者数组

*/

private static function limit($limit=[]){

$limitStr="";

if(is_array($limit)){

$num=count($limit);

switch($num){

case 1:$limitStr=" limit ".$limit[0];break;

case 2:$limitStr=" limit ".$limit[0].",".$limit[1];break;

default:$limitStr="";

}

}elseif((is_string($limit) && trim($limit)) || is_numeric($limit)){

$limitStr=" limit ".$limit;

}

return $limitStr;

}

/*

*用于完成增删改操作

*/

public static function execute($sql=''){

$link=self::$link;

self::$queryStr=$sql;

if(self::$PDOStatement){//其实增删改和PDOStatement对象没什么关系,但保险起见还是删一下的好

self:free();

}

$res=$link->exec($sql);

self::haveErrorThrowException();

if($res!==false){

self::$lastInsertId=$link->lastInsertId();//如果执行的不是插入操作,则返回0

self::$effectedRow=$res;//受影响的条数

return $res;

}else{

return false;

}

}

private static function haveErrorThrowException(){

$obj=empty(self::$PDOStatement)?self::$link:self::$PDOStatement;

$arrError=$obj->errorInfo();

if($arrError[0]!='00000'){

self::$error='SQLSTATE '.$arrError[0].'; SQL Error '.$arrError[2].'
Error SQL : '.self::$queryStr;

self::throw_exception(self::$error);

return false;

}

}

/*

*释放结果集

*/

private static function free(){

self::$PDOStatement=null;

}

private static function throw_exception($errMsg){

echo "

"

.$errMsg.

"

";

}

}

?>

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

代码段 小部件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值