Login
网站首页 > 文章中心 > 其它

php连接mysql的封装类_php连接MySQL

作者:小编 更新时间:2023-08-01 14:11:58 浏览量:355人看过

python如何使用pymysql连接数据库封装类

检验安装安装是否成功的方法:import pymysql . 如果不报错 说明安装成功.

(1)导入pymysql: import pymysql

务必注意各等号前面的内容!charset参数可避免中文乱码

for each in cur:

php连接mysql并做插入操作的代码,采用了类封装,求解错在哪?求高手指教啊

$link=mysql_connect($this-host,$this-name,$this-pass,$this-datebase)

这里不要填database

$this-query("insert into $table ($name) value ($value)");

value改成values

求个好用的php mysql封装类

php

class?MMysql?{

protected?static?$_dbh?=?null;?//静态属性,所有数据库实例共用,避免重复连接数据库

protected?$_dbType?=?'mysql';

protected?$_pconnect?=?true;?//是否使用长连接

protected?$_host?=?'localhost';

protected?$_user?=?'root';

protected?$_pass?=?'root';

protected?$_dbName?=?null;?//数据库名

protected?$_sql?=?false;?//最后一条sql语句

protected?$_where?=?'';

protected?$_order?=?'';

protected?$_limit?=?'';

protected?$_field?=?'*';

protected?$_clear?=?0;?//状态,0表示查询条件干净,1表示查询条件污染

protected?$_trans?=?0;?//事务指令数?

/**

*?初始化类

*?@param?array?$conf?数据库配置

*/

public?function?__construct(array?$conf)?{

class_exists('PDO')?or?die("PDO:?class?not?exists.");

$this-_host?=?$conf['host'];

$this-_port?=?$conf['port'];

$this-_user?=?$conf['user'];

$this-_pass?=?$conf['passwd'];

$this-_dbName?=?$conf['dbname'];

//连接数据库

if?(?is_null(self::$_dbh)?)?{

$this-_connect();

}

*?连接数据库的方法

protected?function?_connect()?{

$dsn?=?$this-_dbType.':host='.$this-_host.';port='.$this-_port.';dbname='.$this-_dbName;

$options?=?$this-_pconnect?array(PDO::ATTR_PERSISTENT=true)?:?array();

try?{?

$dbh?=?new?PDO($dsn,?$this-_user,?$this-_pass,?$options);

$dbh-setAttribute(PDO::ATTR_ERRMODE,?PDO::ERRMODE_EXCEPTION);?//设置如果sql语句执行错误则抛出异常,事务会自动回滚

$dbh-setAttribute(PDO::ATTR_EMULATE_PREPARES,?false);?//禁用prepared?statements的仿真效果(防SQL注入)

}?catch?(PDOException?$e)?{?

die('Connection?failed:?'?.?$e-getMessage());

self::$_dbh?=?$dbh;

/**?

*?字段和表名添加?+符号

*?保证指令中使用关键字不出错?针对mysql?

*?@param?string?$value?

*?@return?string?

*/?

protected?function?_addChar($value)?{?

if?('*'==$value?||?false!==strpos($value,'(')?||?false!==strpos($value,'.')?||?false!==strpos($value,'+'))?{?

//如果包含*?或者?使用了sql方法?则不作处理?

}?elseif?(false?===?strpos($value,'+')?)?{?

$value?=?'+'.trim($value).'+';

}?

return?$value;?

*?取得数据表的字段信息?

*?@param?string?$tbName?表名

*?@return?array?

protected?function?_tbFields($tbName)?{

$sql?=?'SELECT?COLUMN_NAME?FROM?INFORMATION_SCHEMA.COLUMNS?WHERE?TABLE_NAME="'.$tbName.'"?AND?TABLE_SCHEMA="'.$this-_dbName.'"';

$stmt?=?self::$_dbh-prepare($sql);

$stmt-execute();

$result?=?$stmt-fetchAll(PDO::FETCH_ASSOC);

$ret?=?array();

foreach?($result?as?$key=$value)?{

$ret[$value['COLUMN_NAME']]?=?1;

return?$ret;

*?过滤并格式化数据表字段

*?@param?string?$tbName?数据表名?

*?@param?array?$data?POST提交数据?

*?@return?array?$newdata?

protected?function?_dataFormat($tbName,$data)?{

if?(!is_array($data))?return?array();

$table_column?=?$this-_tbFields($tbName);

$ret=array();

foreach?($data?as?$key=$val)?{

if?(!is_scalar($val))?continue;?//值不是标量则跳过

if?(array_key_exists($key,$table_column))?{

$key?=?$this-_addChar($key);

if?(is_int($val))?{?

$val?=?intval($val);?

}?elseif?(is_float($val))?{?

$val?=?floatval($val);?

}?elseif?(preg_match('/^\(\w*(\+|\-|\*|\/)?\w*\)$/i',?$val))?{

//?支持在字段的值里面直接使用其它字段?,例如?(score+1)?(name)?必须包含括号

$val?=?$val;

}?elseif?(is_string($val))?{?

$val?=?'"'.addslashes($val).'"';

$ret[$key]?=?$val;

*?执行查询?主要针对?SELECT,?SHOW?等指令

*?@param?string?$sql?sql指令?

*?@return?mixed?

protected?function?_doQuery($sql='')?{

$this-_sql?=?$sql;

$pdostmt?=?self::$_dbh-prepare($this-_sql);?//prepare或者query?返回一个PDOStatement

$pdostmt-execute();

$result?=?$pdostmt-fetchAll(PDO::FETCH_ASSOC);

return?$result;

*?执行语句?针对?INSERT,?UPDATE?以及DELETE,exec结果返回受影响的行数

*?@return?integer?

protected?function?_doExec($sql='')?{

return?self::$_dbh-exec($this-_sql);

*?执行sql语句,自动判断进行查询或者执行操作?

*?@param?string?$sql?SQL指令?

public?function?doSql($sql='')?{

$queryIps?=?'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD?DATA|SELECT?.*?INTO|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK';?

if?(preg_match('/^\s*"?('?.?$queryIps?.?')\s+/i',?$sql))?{?

return?$this-_doExec($sql);

else?{

//查询操作

return?$this-_doQuery($sql);

*?获取最近一次查询的sql语句?

*?@return?String?执行的SQL?

public?function?getLastSql()?{?

return?$this-_sql;

*?插入方法

*?@param?string?$tbName?操作的数据表名

*?@param?array?$data?字段-值的一维数组

*?@return?int?受影响的行数

public?function?insert($tbName,array?$data){

$data?=?$this-_dataFormat($tbName,$data);

if?(!$data)?return;

$sql?=?"insert?into?".$tbName."(".implode(',',array_keys($data)).")?values(".implode(',',array_values($data)).")";

*?删除方法

public?function?delete($tbName)?{

//安全考虑,阻止全表删除

if?(!trim($this-_where))?return?false;

$sql?=?"delete?from?".$tbName."?".$this-_where;

$this-_clear?=?1;

$this-_clear();

*?更新函数

*?@param?array?$data?参数数组

public?function?update($tbName,array?$data)?{

//安全考虑,阻止全表更新

$valArr?=?'';

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

$valArr[]?=?$k.'='.$v;

$valStr?=?implode(',',?$valArr);

$sql?=?"update?".trim($tbName)."?set?".trim($valStr)."?".trim($this-_where);

*?查询函数

*?@return?array?结果集

public?function?select($tbName='')?{

$sql?=?"select?".trim($this-_field)."?from?".$tbName."?".trim($this-_where)."?".trim($this-_order)."?".trim($this-_limit);

return?$this-_doQuery(trim($sql));

*?@param?mixed?$option?组合条件的二维数组,例:$option['field1']?=?array(1,'=','or')

*?@return?$this

public?function?where($option)?{

if?($this-_clear0)?$this-_clear();

$this-_where?=?'?where?';

$logic?=?'and';

if?(is_string($option))?{

$this-_where?.=?$option;

elseif?(is_array($option))?{

foreach($option?as?$k=$v)?{

if?(is_array($v))?{

$relative?=?isset($v[1])?$v[1]?:?'=';

$condition?=?'?('.$this-_addChar($k).'?'.$relative.'?'.$v[0].')?';

$condition?=?'?('.$this-_addChar($k).'='.$v.')?';

$this-_where?.=?isset($mark)?$logic.$condition?:?$condition;

$mark?=?1;

return?$this;

*?设置排序

*?@param?mixed?$option?排序条件数组?例:array('sort'='desc')

public?function?order($option)?{

$this-_order?=?'?order?by?';

$this-_order?.=?$option;

foreach($option?as?$k=$v){

$order?=?$this-_addChar($k).'?'.$v;

$this-_order?.=?isset($mark)?','.$order?:?$order;

*?设置查询行数及页数

*?@param?int?$page?pageSize不为空时为页数,否则为行数

*?@param?int?$pageSize?为空则函数设定取出行数,不为空则设定取出行数及页数

public?function?limit($page,$pageSize=null)?{

if?($pageSize===null)?{

$this-_limit?=?"limit?".$page;

$pageval?=?intval(?($page?-?1)?*?$pageSize);

$this-_limit?=?"limit?".$pageval.",".$pageSize;

*?设置查询字段

*?@param?mixed?$field?字段数组

public?function?field($field){

if?(is_string($field))?{

$field?=?explode(',',?$field);

$nField?=?array_map(array($this,'_addChar'),?$field);

$this-_field?=?implode(',',?$nField);

*?清理标记函数

protected?function?_clear()?{

$this-_where?=?'';

$this-_order?=?'';

$this-_limit?=?'';

$this-_field?=?'*';

$this-_clear?=?0;

*?手动清理标记

public?function?clearKey()?{

*?启动事务?

*?@return?void?

public?function?startTrans()?{?

//数据rollback?支持?

if?($this-_trans==0)?self::$_dbh-beginTransaction();

$this-_trans++;?

return;?

*?用于非自动提交状态下面的查询提交?

*?@return?boolen?

public?function?commit()?{

$result?=?true;

if?($this-_trans0)?{?

$result?=?self::$_dbh-commit();?

$this-_trans?=?0;

*?事务回滚?

public?function?rollback()?{

if?($this-_trans0)?{

$result?=?self::$_dbh-rollback();

*?关闭连接

*?PHP?在脚本结束时会自动关闭连接.

public?function?close()?{

if?(!is_null(self::$_dbh))?self::$_dbh?=?null;

php实现mysql封装类示例

php封装mysql类

复制代码

代码如下:

class

Mysql

{

private

$host;

$user;

$pwd;

$dbName;

$charset;

$conn

=

null;

public

function

__construct()

$this-host

'localhost';

$this-user

'root';

$this-pwd

$this-dbName

'test';

$this-connect($this-host,$this-user,$this-pwd);

$this-switchDb($this-dbName);

$this-setChar($this-charset);

//负责链接

connect($h,$u,$p)

mysql_connect($h,$u,$p);

$this-conn

$conn;

//负责切换数据库

switchDb($db)

$sql

'use'

.

$db;

$this-query($sql);

//负责设置字符集

setChar($char)

'set

names'

$char;

//负责发送sql查询

query($sql)

return

mysql_query($sql,$this-conn);

//负责获取多行多列的select结果

getAll($sql)

$list

array();

$rs

if

(!$rs)

false;

while

($row

mysql_fetch_assoc($rs))

$list[]

$row;

$list;

getRow($sql)

if(!$rs)

mysql_fetch_assoc($rs);

getOne($sql)

$row[0];

close()

mysql_close($this-conn);

echo

'pre';

$mysql

new

Mysql();

print_r($mysql);

"insert

into

stu

values

if($mysql-query($sql)){

"query成功";

}else

"失败";

"br

/";

"select

*

from

stu";

$arr

$mysql-getAll($sql);

print_r($arr);

PHP访问MYSQL数据库封装类(附函数说明)

/*

MYSQL

数据库访问封装类

访问方式,本封装类以mysql_封装

数据访问的一般流程:

①.,连接数据库

mysql_connect

or

mysql_pconnect

mysql_select_db

mysql_query

mysql_fetch_array

mysql_num_rows

mysql_fetch_assoc

mysql_fetch_row

etc

db_mysql

var

$querynum

;

//当前页面进程查询数据库的次数

$dblink

//数据库连接资源

//链接数据库

,

$halt=true)

$func

empty($pconnect)

'mysql_connect'

:

'mysql_pconnect'

$this-dblink

@$func($dbhost,$dbuser,$dbpw)

($halt

!$this-dblink)

$this-halt("无法链接数据库!");

//设置查询字符集

mysql_query("SET

character_set_connection={$dbcharset},character_set_results={$dbcharset},character_set_client=binary",$this-dblink)

//选择数据库

$dbname

@mysql_select_db($dbname,$this-dblink)

select_db($dbname)

mysql_select_db($dbname,$this-dblink);

//执行SQL查询

$this-querynum++

mysql_query($sql,$this-dblink)

//返回最近一次与连接句柄关联的INSERT,UPDATE

或DELETE

查询所影响的记录行数

affected_rows()

mysql_affected_rows($this-dblink)

//取得结果集中行的数目,只对select查询的结果集有效

num_rows($result)

mysql_num_rows($result)

//获得单格的查询结果

result($result,$row=0)

mysql_result($result,$row)

//取得上一步

INSERT

操作产生的

ID,只对表有AUTO_INCREMENT

ID的操作有效

insert_id()

($id

mysql_insert_id($this-dblink))

$id

$this-result($this-query("SELECT

last_insert_id()"),

0);

//从结果集提取当前行,以数字为key表示的关联数组形式返回

fetch_row($result)

mysql_fetch_row($result)

//从结果集提取当前行,以字段名为key表示的关联数组形式返回

fetch_assoc($result)

mysql_fetch_assoc($result);

//从结果集提取当前行,以字段名和数字为key表示的关联数组形式返回

fetch_array($result)

mysql_fetch_array($result);

//关闭链接

mysql_close($this-dblink)

//输出简单的错误html提示信息并终止程序

halt($msg)

$message

"html\nhead\n"

.=

"meta

"/head\n"

"body\n"

"数据库出错:".htmlspecialchars($msg)."\n"

"/body\n"

"/html"

exit

以上就是土嘎嘎小编为大家整理的php连接mysql的封装类相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章