
正文
php7数据库封装 php封装数据库操作
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
php文件读取数据库里面的数据 并生成一个js文件
直接php读取mysql,然后再读取模板进来,采用简单的模板变量替换后再输出js
相关问答
Q1: php中怎么把数据库连接写成一个接口
php7数据库封装我自己封装的一个
?php
class AppConfig{
public static $dbParam = array(
'dbHost' = 'localhost',
'dbUser' = 'root',
'dbPassword' ='',
'dbName' = '数据库名',
'dbCharset' = 'utf8',
'dbPort' = 3306,
'dbPrefix' = 'test_',
'dbPconnect' = 0,
'dbDebug' = true,
);
}
class Model {
private $version = ''; //mysql版本
private $config = array(); //数据库配置数组
private $class; //当前类名
public $tablepre = 'ts_'; //表前缀
public $db = ''; //库名
public $table = ''; //表名
private static $link; //数据库链接句柄
private $data = array(); //中间数据容器
private $condition = ''; //查询条件
private $fields = array(); //字段信息
private $sql = array(); //sql集合php7数据库封装,调试用
public $primaryKey = 'id'; //表主键
//构造函数初始化
public function __construct($dbParam = array()) {
$this-config = (is_array($dbParam) !empty($dbParam)) ? $dbParam : AppConfig::$dbParam;
$this-connect();
$this-init();
}
//链接数据库
private function connect() {
if($this-config['dbPconnect']) {
self::$link = @mysql_pconnect($this-config['dbHost'], $this-config['dbUser'], $this-config['dbPassword']);
}else{
self::$link = @mysql_connect($this-config['dbHost'], $this-config['dbUser'], $this-config['dbPassword'], true);
}
mysql_errno(self::$link) != 0 $this-errdie('Could not connect Mysql: ');
$this-db= !empty($this-db) ? $this-db : $this-config['dbName'];
$serverinfo = $this-version();
if ($serverinfo '4.1' $this-config['dbCharset']) {
mysql_query("SET character_set_connection=".$this-config['dbCharset'].",character_set_results=".$this-config['dbCharset'].",character_set_client=binary", self::$link);
}
if ($serverinfo '5.0') {
mysql_query("SET sql_mode=''", self::$link);
}
@mysql_select_db($this-db, self::$link) or $this-errdie('Cannot use database');
return self::$link;
}
//表基本信息初始化
protected function init() {
$this-class = get_class($this);
$this-table = !empty($this-table) ? $this-table : strtolower($this-class);
$this-table = $this-tablepre . $this-table;
return $this;
}
//设置属性值
public function __set($name, $value) {
//exit($value);
$this-data['fields'][$name] = $value;
}
//获取属性值
public function __get($name) {
if(isset($this-data['fields'][$name])) {
return($this-data['fields'][$name]);
}else {
return NULL;
}
}
//字段信息处理
private function implodefields($data) {
if (!is_array($data)) {
$data = array();
}
$this-fields = !empty($this-data['fields']) ? array_merge($this-data['fields'], $data) : $data;
foreach($this-fields as $key = $value) {
$fieldsNameValueStr[] = "`$key`='$value'";
$fieldsNameStr[] = "`$key`";
$fieldsValueStr[] = "'$value'";
}
return array($fieldsNameValueStr, $fieldsNameStr, $fieldsValueStr);
}
//条件判断组装
private function condition($where = NULL) {
if (is_numeric($where)) {
$where = "WHERE `{$this-primaryKey}`='{$where}' LIMIT 1";
}elseif (is_array($where)){
$where = "WHERE `{$this-primaryKey}` in (".implode(',',$where).")";
}elseif(!empty($this-data['condition'])){
//'预留WHERE', 'order', 'group', 'limit' …………等条件关键词处理接口
$where = $where ? "WHERE {$where}" : "WHERE 1";
isset($this-data['condition']['where']) $where .= ' AND '.$this-data['condition']['where'];
isset($this-data['condition']['group']) $where .= ' GROUP BY '.$this-data['condition']['group'];
isset($this-data['condition']['order']) $where .= ' ORDER BY '.$this-data['condition']['order'];
isset($this-data['condition']['limit']) $where .= ' LIMIT '.$this-data['condition']['limit'];
}else{
$where = "WHERE {$where}";
}
$this-condition = $where;
return $this;
}
//插入数据
public function insert($data = array(), $replace = false) {
$fields = $this-implodefields($data);
$insert = $replace ? 'REPLACE' : 'INSERT';
$sql = "{$insert} INTO `{$this-db}`.`{$this-table}` (".implode(', ',$fields[1]).") values (".implode(', ',$fields[2]).")";
$this-query($sql);
return $this-getInsertId();
}
//更新数据
public function update($data = array() ,$where = '') {
$numargs = func_num_args();
if ($numargs == 1) {
$where = $data;
$data = array();
}
$fields = $this-implodefields($data);
$this-condition($where);
$sql = "UPDATE `{$this-db}`.`{$this-table}` SET ".implode(', ',$fields[0])." {$this-condition}";
$this-query($sql);
return $this-getAffectedRows();
}
//删除数据
public function delete($where = NULL) {
if(!is_array($where) strtolower(substr(trim($where), 0, 6)) == 'delete'){
$sql = $where;
}else{
$this-condition($where);
$sql = "DELETE FROM `{$this-db}`.`{$this-table}` {$this-condition}";
}
$this-query($sql);
return $this-getAffectedRows();
}
//查询数据
public function select($where = NULL, $fields = '*') {
if(!is_array($where) strtolower(substr(trim($where), 0, 6)) == 'select'){
$sql = $where;
}else{
$this-condition($where);
$sql = "SELECT {$fields} FROM `{$this-db}`.`{$this-table}` {$this-condition}";
}
return $this-fetch($this-query($sql));
}
//查询一条数据
public function getOne($where, $fields = '*') {
$data = $this-select($where, $fields = '*');
if($data) {
return $data[0];
}
return array();
}
//查询多条数据
public function getAll($where, $fields = '*') {
$data = $this-select($where, $fields = '*');
return $data;
}
//结果数量
public function getCount($where = '', $fields = '*') {
$this-condition($where);
$sql = "SELECT count({$fields}) as count FROM `{$this-db}`.`{$this-table}` {$this-condition}";
$data = $this-query($sql);
if($data){
return @mysql_result($data,0);
}
return 0;
}
//执行sql语句(flag为0返回mysql_query查询后的结果php7数据库封装,为1返回lastidphp7数据库封装,其php7数据库封装他返回影响行数,默认为2返回影响行数)
public function query($sql, $flag = '0', $type = '') {
if ($this-config['dbDebug']) {
$startime = $this-microtime_float();
}
//查询
if ($type == 'UNBUFFERED' function_exists('mysql_unbuffered_query')) {
$result = @mysql_unbuffered_query($sql, self::$link);
} else {
//exit($sql);
$result = @mysql_query($sql, self::$link);
}
//重试
if (in_array(mysql_errno(self::$link), array(2006,2013)) empty($result) $this-config['dbPconnect']==0 !defined('RETRY')) {
define('RETRY',true); @mysql_close(self::$link); sleep(2);
$this-connect();
$result = $this-query($sql);
}
if ($result === false) {
$this-errdie($sql);
}
if ($this-config['dbDebug']) {
$endtime = $this-microtime_float();
$this-sql[] = array($sql,$endtime-$startime);
}
//清空操作数据
$this-data = array();
return $flag == '0' ? $result : ($flag == '1' ? $this-getInsertId() : $this-getAffectedRows());
}
//返回结果$onlyone为true返回一条否则返回所有,$type有MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH
public function fetch($result, $onlyone = false, $type = MYSQL_ASSOC) {
if($result){
if ($onlyone) {
$row = @mysql_fetch_array($result, $type);
return $row;
}else{
$rowsRs = array();
while($row=@mysql_fetch_array($result, $type)) {
$rowsRs[] = $row;
}
return $rowsRs;
}
}
return array();
}
//可以运行SELECT,SHOW,EXPLAIN 或 DESCRIBE 等返回一个资源标识符的语句得到返回结果数组
public function show($sql, $onlyone = false) {
return $this-fetch($this-query($sql), $onlyone);
}
// 使用call函数处理同类型函数
private function __call($name, $arguments) {
$callArr = array('on', 'where', 'order', 'between', 'group', 'limit');
if (in_array($name, $callArr)) {
$this-data['condition'][$name] = $arguments[0];
}else{
$this-errdie("function error: function {$name} is not in ($this-class) class exist");
}
return $this;
}
//返回最后一次插入ID
public function getInsertId() {
return @mysql_insert_id(self::$link);
}
//返回受影响行数
public function getAffectedRows() {
return @mysql_affected_rows(self::$link);
}
//获取错误信息
private function error() {
return ((self::$link) ? @mysql_error(self::$link) : @mysql_error());
}
//获取错误信息ID
private function errno() {
return ((self::$link) ? @mysql_errno(self::$link) : @mysql_errno());
}
//获取版本信息
function version() {
if(empty($this-version)) {
$this-version = mysql_get_server_info(self::$link);
}
return $this-version;
}
//打印错误信息
private function errdie($sql = '') {
if ($this-config['dbDebug']) {
die('/BRBMySQL ERROR/B/BR
SQL:'.$sql.'/BR
ERRNO:'.$this-errno().'/BR
ERROR:'.$this-error().'/BR');
}
die('DB ERROR!!!');
}
//获取时间微妙数
private function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
//析构函数
public function __destruct() {
echo 'hr';
$this-config['dbDebug'] print_r($this-sql);
//unset($this-result);
//unset($this-condition);
//unset($this-data);
}
}
class user extends Model {
//public $db = 'qsf_mvc';
//public $table = 'user';
public $primaryKey = 'uid';
}
$userObj = new user();
//---------------------------------------插入数据方法一-----------------------------------------
//模拟ActiveRecord模式 插入数据
$userObj-username = 'hoho';
$userObj-passwd = '1478522';
$userObj-email = 'qsf.z11@163.com';
$userObj-sex = 1;
$userObj-desc = '清洁工';
$insetId = $userObj-insert();
if ($insetId 0) {
echo "插入ID为:{$insetId}BR";
}
//---------------------------------------插入数据方法二-----------------------------------------
//直接数组做参数插入数据
$userArr = array(
'username' = 'hoho',
'passwd' = '1478522',
'email' = 'qsf.z2121ia@163.com',
'sex' = '1',
'desc' = '厨师',
);
$insetId = $userObj-insert($userArr);
if ($insetId 0) {
echo "插入ID为:{$insetId}BR";
}
//---------------------------------------更新数据方法一----------------------------------------
$userObj-username = 'h111oho';
$userObj-passwd = '1478511122';
$userObj-email = 'qsf111ia@163.com';
$userObj-sex = 1;
$userObj-desc = '清洁工';
$affectedRows1 = $userObj-update(89);
if ($affectedRows1 0) {
echo "影响行数为:{$affectedRows1}BR";
}
//---------------------------------------更新数据方法二----------------------------------------
//更新记录(传递参数的方式和insert操作一样)
$userArr = array(
'username' = 'hohoho',
'passwd' = '1474rr4448522',
'email' = 'qsf.rrza@165.com',
'sex' = '0',
'desc' = '厨师qq',
);
$affectedRows = $userObj-update($userArr, $insetId);
if ($affectedRows 0) {
echo "影响行数为:{$affectedRows}BR";
}
//----------------------------------------查询数据----------------------------------------------
$userRs0 = $userObj-select(8); //单个主键值
//print_r($userRs0);
$userRs1 = $userObj-select(array(1,5,8)); //多个主键值的数组
//print_r($userRs1);
$userRs2 = $userObj-select('select count(*) as count from user where uid 20'); //直接完整sql语句
//print_r($userRs2);
$userRs3 = $userObj-select("`uid` 0"); //where条件
//print_r($userRs3);
$userRs4 = $userObj-getOne("`uid` 0"); //获取单条记录
//print_r($userRs4);
$usersRs5 = $userObj-getAll("`uid` 0"); ////获取所有记录
//print_r($usersRs5);
$usersRs6 = $userObj-limit('0,10')-where('uid 100')-order('uid DESC')-group('username')-select();
//print_r($usersRs6);
//----------------------------------------删除数据-----------------------------------------------
//删除操作传递参数的方式和select操作一样
$userObj-delete(60); //单个主键值
$userObj-delete(array(1,5,8)); //多个主键值的数组
$userObj-delete('delete from user where uid 100'); //直接完整sql语句
$userObj-delete("`uid` 100"); //where条件
$userObj-limit('5')-where('uid 80')-delete();
//----------------------------------------特殊查询-----------------------------------------------
$userShowRs = $userObj-show('show create table user', true); //获取特殊查询的结果,第二个参数代表返回一条结果还是所有的结果
Q2: thikphp 单独php文件怎样操作数据库
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
常用的配置方式是在项目配置文件中添加下面的参数:
?php
//项目配置文件
return array(
//数据库配置信息
'DB_TYPE' = 'mysql', // 数据库类型
'DB_HOST' = 'localhost', // 服务器地址
'DB_NAME' = 'thinkphp', // 数据库名
'DB_USER' = 'root', // 用户名
'DB_PWD' = '', // 密码
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 数据库表前缀
//其他项目配置参数
// ...
);
或者采用如下配置
'DB_DSN' = 'mysql://username:password@localhost:3306/DbName'
使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名
如果两种配置参数同时存在的话,DB_DSN配置参数优先。
注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。1
如果采用PDO驱动的话,则必须首先配置DB_TYPE 为pdo,然后还需要单独配置其他参数,例如:
//PDO连接方式
'DB_TYPE' = 'pdo', // 数据库类型
'DB_USER' = 'root', // 用户名
'DB_PWD' = '', // 密码
'DB_PREFIX' = 'think_', // 数据库表前缀
'DB_DSN' = 'mysql:host=localhost;dbname=thinkphp;charset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同。
配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个项目的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个项目和不同的分组定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。1
第二种 在模型类里面定义connection属性
如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:
//在模型里单独设置数据库连接信息
protected $connection = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
);
也可以采用DSN方式定义,例如:
//或者使用DSN定义
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp';
如果我们已经在配置文件中配置了额外的数据库连接信息,例如:
//数据库配置1
'DB_CONFIG1' = array(
'db_type' = 'mysql',
'db_user' = 'root',
'db_pwd' = '1234',
'db_host' = 'localhost',
'db_port' = '3306',
'db_name' = 'thinkphp'
),
//数据库配置2
'DB_CONFIG2' = 'mysql://root:1234@localhost:3306/thinkphp';
那么,我们可以把模型类的属性定义改为:
//调用配置文件中的数据库配置1
protected $connection = 'DB_CONFIG1';
//调用配置文件中的数据库配置2
protected $connection = 'DB_CONFIG2';
如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo');
表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:
$User = M('User','other_','DB_CONFIG2');
如果你的个别数据表没有定义任何前缀的话,可以在前缀参数中传入NULL,例如:
$User = M('User',Null,'DB_CONFIG2');
表示实例化User模型,连接的是demo数据库的user表。
需要注意的是,ThinkPHP的数据库连接的惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。
Q3: Discuz是怎么封装数据库的
可以直接用php的方法也可以用discuz封装的一些方法的,建议去站帮网看下,有discuz开发的视频教程的
Q4: PHP中如何判断一个数据已经存在于数据库中?
材料/工具:电脑、PHP
1、首先,创建一个方法function来供调用。
2、先判断id是否为0,为0则是不存在这条数据的。(假设判断数据库的数据是否存在相同id的数据)
3、然后写sql语句,能查询对应id的数据是否存在了。
4、然后调用查询数据库的方法,判断返回来的结果是否为空。不为空则是数据已存在。
5、如果是判断数据是否存在的关键字段是字符串的,我们稍为改一下代码就行了,比如这里的,判断email是否已经存在于数据库中。
6、我们这里的queryFirstColumn方法是封装好的数据库函数。
7、也可以将其改成一般的mysql_query的系统内置方法来查询的,代码如图。
Q5: php中有mysqli类,是吗?$mysqli->info
本文所述php7数据库封装的是一个在PHP中以mysqli方式连接数据库php7数据库封装的一个数据库类实例,该数据库类是从一个PHP的CMS中整理出来的,可实现PHP连接数据库类,MySQLi版,兼容PHP4,对于有针对性需要的朋友可根据此代码进行优化和修改。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
?php
#==================================================================================================
# Filename: /db/db_mysqli.php
# Note : 连接数据库类,MySQLi版
#==================================================================================================
#[类库sql]
class db_mysqli
{
var $query_count = 0;
var $host;
var $user;
var $pass;
var $data;
var $conn;
var $result;
var $prefix = "qingga
关于php7数据库封装和php封装数据库操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








