- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP的PDO常用类库实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了PHP的PDO常用类库。分享给大家供大家参考,具体如下:
1、Db.class.php 连接数据库 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
// 连接数据库
class
Db {
static
public
function
getDB() {
try
{
$pdo
=
new
PDO(DB_DSN, DB_USER, DB_PWD);
$pdo
->setAttribute(PDO::ATTR_PERSISTENT, true);
// 设置数据库连接为持久连接
$pdo
->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 设置抛出错误
$pdo
->setAttribute(PDO::ATTR_ORACLE_NULLS, true);
// 设置当字符串为空转换为 SQL 的 NULL
$pdo
->query(
'SET NAMES utf8'
);
// 设置数据库编码
}
catch
(PDOException
$e
) {
exit
(
'数据库连接错误,错误信息:'
.
$e
->getMessage());
}
return
$pdo
;
}
}
?>
|
2、Model.class.php 数据库操作类 。
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
|
<?php
/**
* 数据库操作类库
* author Lee.
* Last modify $Date: 2012-1-19 13:59;04 $
*/
class
M {
private
$_db
;
//数据库句柄
public
$_sql
;
//SQL语句
/**
* 构造方法
*/
public
function
__construct() {
$this
->_db = Db::getDB();
}
/**
* 数据库添加操作
* @param string $tName 表名
* @param array $field 字段数组
* @param array $val 值数组
* @param bool $is_lastInsertId 是否返回添加ID
* @return int 默认返回成功与否,$is_lastInsertId 为true,返回添加ID
*/
public
function
insert(
$tName
,
$fields
,
$vals
,
$is_lastInsertId
=FALSE) {
try
{
if
(!
is_array
(
$fields
) || !
is_array
(
$vals
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$fields
=
$this
->formatArr(
$fields
);
$vals
=
$this
->formatArr(
$vals
, false);
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"INSERT INTO {$tName} ({$fields}) VALUES ({$vals})"
;
if
(!
$is_lastInsertId
) {
$row
=
$this
->_db->
exec
(
$this
->_sql);
return
$row
;
}
else
{
$this
->_db->
exec
(
$this
->_sql);
$lastId
= (int)
$this
->_db->lastInsertId();
return
$lastId
;
}
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 数据库修改操作
* @param string $tName 表名
* @param array $field 字段数组
* @param array $val 值数组
* @param string $condition 条件
* @return int 受影响的行数
*/
public
function
update(
$tName
,
$fieldVal
,
$condition
) {
try
{
if
(!
is_array
(
$fieldVal
) || !
is_string
(
$tName
) || !
is_string
(
$condition
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$upStr
=
''
;
foreach
(
$fieldVal
as
$k
=>
$v
) {
$upStr
.=
'`'
.
$k
.
'`='
.
'\''
.
$v
.
'\''
.
','
;
}
$upStr
= rtrim(
$upStr
,
','
);
$this
->_sql =
"UPDATE {$tName} SET {$upStr} WHERE {$condition}"
;
$row
=
$this
->_db->
exec
(
$this
->_sql);
return
$row
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 数据库删除操作(注:必须添加 where 条件)
* @param string $tName 表名
* @param string $condition 条件
* @return int 受影响的行数
*/
public
function
del(
$tName
,
$condition
) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$condition
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"DELETE FROM {$tName} WHERE {$condition}"
;
$row
=
$this
->_db->
exec
(
$this
->_sql);
return
$row
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 返回表总个数
* @param string $tName 表名
* @param string $condition 条件
* @return int
*/
public
function
total(
$tName
,
$condition
=
''
) {
try
{
if
(!
is_string
(
$tName
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"SELECT COUNT(*) AS total FROM {$tName}"
.
(
$condition
==
''
?
''
:
' WHERE '
.
$condition
);
$re
=
$this
->_db->query(
$this
->_sql);
foreach
(
$re
as
$v
) {
$total
=
$v
[
'total'
];
}
return
(int)
$total
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 数据库删除多条数据
* @param string $tName 表名
* @param string $field 依赖字段
* @param array $ids 删除数组
* @return int 受影响的行数
*/
public
function
delMulti(
$tName
,
$field
,
$ids
) {
try
{
if
(!
is_string
(
$tName
) || !
is_array
(
$ids
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$delStr
=
''
;
$tName
=
$this
->formatTabName(
$tName
);
$field
=
$this
->formatTabName(
$field
);
foreach
(
$ids
as
$v
) {
$delStr
.=
$v
.
','
;
}
$delStr
= rtrim(
$delStr
,
','
);
$this
->_sql =
"DELETE FROM {$tName} WHERE {$field} IN ({$delStr})"
;
$row
=
$this
->_db->
exec
(
$this
->_sql);
return
$row
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 获取表格的最后主键(注:针对 INT 类型)
* @param string $tName 表名
* @return int
*/
public
function
insertId(
$tName
) {
try
{
if
(!
is_string
(
$tName
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$this
->_sql =
"SHOW TABLE STATUS LIKE '{$tName}'"
;
$result
=
$this
->_db->query(
$this
->_sql);
$insert_id
= 0;
foreach
(
$result
as
$v
) {
$insert_id
=
$v
[
'Auto_increment'
];
}
return
(int)
$insert_id
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 检查数据是否已经存在(依赖条件)
* @param string $tName 表名
* @param string $field 依赖的字段
* @return bool
*/
public
function
exists(
$tName
,
$condition
) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$condition
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"SELECT COUNT(*) AS total FROM {$tName} WHERE {$condition}"
;
$result
=
$this
->_db->query(
$this
->_sql);
foreach
(
$result
as
$v
) {
$b
=
$v
[
'total'
];
}
if
(
$b
) {
return
true;
}
else
{
return
false;
}
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 检查数据是否已经存在(依赖 INT 主键)
* @param string $tName 表名
* @param string $primary 主键
* @param int $id 主键值
* @return bool
*/
public
function
existsByPK(
$tName
,
$primary
,
$id
) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$primary
)
|| !
is_int
(
$id
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"SELECT COUNT(*) AS total FROM {$tName} WHERE {$primary} = "
.
$id
;
$result
=
$this
->_db->query(
$this
->_sql);
foreach
(
$result
as
$v
) {
$b
=
$v
[
'total'
];
}
if
(
$b
) {
return
true;
}
else
{
return
false;
}
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 预处理删除(注:针对主键为 INT 类型,推荐使用)
* @param string $tName 表名
* @param string $primary 主键字段
* @param int or array or string $ids 如果是删除一条为 INT,多条为 array,删除一个范围为 string
* @return int 返回受影响的行数
*/
public
function
delByPK(
$tName
,
$primary
,
$ids
,
$mult
=FALSE) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$primary
)
|| (!
is_int
(
$ids
) && !
is_array
(
$ids
) && !
is_string
(
$ids
))
|| !
is_bool
(
$mult
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$stmt
=
$this
->_db->prepare(
"DELETE FROM {$tName} WHERE {$primary}=?"
);
if
(!
$mult
) {
$stmt
->bindParam(1,
$ids
);
$row
=
$stmt
->execute();
}
else
{
if
(
is_array
(
$ids
)) {
$row
= 0;
foreach
(
$ids
as
$v
) {
$stmt
->bindParam(1,
$v
);
if
(
$stmt
->execute()) {
$row
++;
}
}
}
elseif
(
is_string
(
$ids
)) {
if
(!
strpos
(
$ids
,
'-'
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$split
=
explode
(
'-'
,
$ids
);
if
(
count
(
$split
)!=2 ||
$split
[0]>
$split
[1])
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$i
= null;
$count
=
$split
[1]-
$split
[0]+1;
for
(
$i
=0;
$i
<
$count
;
$i
++) {
$idArr
[
$i
] =
$split
[0]++;
}
$idStr
=
''
;
foreach
(
$idArr
as
$id
) {
$idStr
.=
$id
.
','
;
}
$idStr
= rtrim(
$idStr
,
','
);
$this
->_sql =
"DELETE FROM {$tName} WHERE {$primary} in ({$idStr})"
;
$row
=
$this
->_db->
exec
(
$this
->_sql);
}
}
return
$row
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 返回单个字段数据或单条记录
* @param string $tName 表名
* @param string $condition 条件
* @param string or array $fields 返回的字段,默认是*
* @return string || array
*/
public
function
getRow(
$tName
,
$condition
=
''
,
$fields
=
"*"
) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$condition
)
|| !
is_string
(
$fields
) ||
empty
(
$fields
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$this
->_sql =
"SELECT {$fields} FROM {$tName} "
;
$this
->_sql .= (
$condition
==
''
?
''
:
"WHERE {$condition}"
) .
" LIMIT 1"
;
$sth
=
$this
->_db->prepare(
$this
->_sql);
$sth
->execute();
$result
=
$sth
->fetch(PDO::FETCH_ASSOC);
if
(
$fields
===
'*'
) {
return
$result
;
}
else
{
return
$result
[
$fields
];
}
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 返回多条数据
* @param string $tName 表名
* @param string $fields 返回字段,默认为*
* @param string $condition 条件
* @param string $order 排序
* @param string $limit 显示个数
* @return PDOStatement
*/
public
function
getAll(
$tName
,
$fields
=
'*'
,
$condition
=
''
,
$order
=
''
,
$limit
=
''
) {
try
{
if
(!
is_string
(
$tName
) || !
is_string
(
$fields
)
|| !
is_string
(
$condition
) || !
is_string
(
$order
)
|| !
is_string
(
$limit
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$tName
=
$this
->formatTabName(
$tName
);
$fields
= (
$fields
==
'*'
||
$fields
==
''
) ?
'*'
:
$fields
;
$condition
=
$condition
==
''
?
''
:
" WHERE "
.
$condition
;
$order
=
$order
==
''
?
''
:
" ORDER BY "
.
$order
;
$limit
=
$limit
==
''
?
''
:
" LIMIT "
.
$limit
;
$this
->_sql =
"SELECT {$fields} FROM {$tName} {$condition} {$order} {$limit}"
;
$sth
=
$this
->_db->prepare(
$this
->_sql);
$sth
->execute();
$result
=
$sth
->fetchAll(PDO::FETCH_ASSOC);
return
$result
;
}
catch
(PDOException
$e
) {
exit
(
$e
->getMessage());
}
}
/**
* 格式化数组(表结构和值)
* @param array $field
* @param bool $isField
* @return string
*/
private
function
formatArr(
$field
,
$isField
=TRUE) {
if
(!
is_array
(
$field
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
$fields
=
''
;
if
(
$isField
) {
foreach
(
$field
as
$v
) {
$fields
.=
'`'
.
$v
.
'`,'
;
}
}
else
{
foreach
(
$field
as
$v
) {
$fields
.=
'\''
.
$v
.
'\''
.
','
;
}
}
$fields
= rtrim(
$fields
,
','
);
return
$fields
;
}
/**
* 格式化问号
* @param int $count 数量
* @return string 返回格式化后的字符串
*/
private
function
formatMark(
$count
) {
$str
=
''
;
if
(!
is_int
(
$count
))
exit
(
$this
->getError(
__FUNCTION__
,
__LINE__
));
if
(
$count
==1)
return
'?'
;
for
(
$i
=0;
$i
<
$count
;
$i
++) {
$str
.=
'?,'
;
}
return
rtrim(
$str
,
','
);
}
/**
* 错误提示
* @param string $fun
* @return string
*/
private
function
getError(
$fun
,
$line
) {
return
__CLASS__
.
'->'
.
$fun
.
'() line<font color="red">'
.
$line
.
'</font> ERROR!'
;
}
/**
* 处理表名
* @param string $tName
* @return string
*/
private
function
formatTabName(
$tName
) {
return
'`'
. trim(
$tName
,
'`'
) .
'`'
;
}
/**
* 析构方法
*/
public
function
__destruct() {
$this
->_db = null;
}
}
|
希望本文所述对大家PHP程序设计有所帮助.
最后此篇关于PHP的PDO常用类库实例分析的文章就讲到这里了,如果你想了解更多关于PHP的PDO常用类库实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
PHP查询: prepare('SELECT * FROM Locations WHERE user_id = :id LIMIT 0, 5'); $query->bindParam(":id
到目前为止我一直在使用 PDO->bindParam 但是在阅读手册时我发现 PDO->bindValue 我可以告诉 PDO->bindValue 按值传递,而 PDO->bindParam 按引用
我使用PDO进行MySQL数据库连接、选择、更新和删除。 但是我在选择带有特殊字符的行时遇到问题,例如,我想选择带有“Judge-Fürstová Mila”的页面标题, 表页, id titl
我使用的是 PHP 5.2.9 和 Apache 2.2.11 以及 mysql 5.1.32 为什么我不能禁用 PDO::ATTR_EMULATE_PREPARES ? 下面是代码: false)
当 PDO::ATTR_PERSISTENT = true 时,PDO::exec 和 PDO::query 之间似乎存在差异。当使用PDO::exec时,连接将不会被重用,并最终导致MySQL出现“
我正在尝试调整 Zend Skeleton App 以使用 ODBC 连接。我能够在 Zend 之外设置 PDO 连接(同一个表、服务器、所有内容),如下所示: new PDO('odbc:DRIVE
我正在使用 XAMPP 3.2.1 在 Windows 7 上使用 PDO,但在使其正常工作时遇到问题,即使它可以在我的共享托管服务器。 settings.php db.php setAttribu
我正在尝试使用以下代码从 get 变量中获取结果,我使用了另一个代码(在下面列出)并且它有效但是在使用它时无法逃脱,我不知道我有什么做错了,但我需要帮助,我刚刚开始 PDO,所以是的,我是个白痴 :D
我有这个代码 try { $dbh = new PDO('mysql:host=localhost;dbname=db_informations', 'root', ''); $dbh
在我的本地开发机器 (MAMP) 上,我的 MySQL 查询返回正确的大小写。但是,在我的共享托管服务器上,使用 fetch(PDO::FETCH_ASSOC); 时,我的结果是小写的 我试过以下方法
我正在使用这个 PDO 连接: try{ $db=new PDO(" mysql:host=localhost; dbname=...", "dbu...", "pass", array(PDO::M
我需要将 PDO 连接从 controller 传递到 cart 类, function __construct($connection) { $this->cart = new cart($
位于 PHP.net 的 PDO 交易示例表明 PDO::exec() 是事务处理的,但是没有这样的例子使用 PDO::query()。 事务是否涵盖 PDO::query()? 此外,据我所知,PD
几天来我一直在使用来自 http://www.mamp.info 的 MAMP Pro 3.07 . 很棒的工具,一切正常。 但是现在我遇到了问题,对于一个新项目,我需要连接到 MSSQL。 我在 w
我正在尝试在我的 PHP 代码中使用 PDO 模块来连接到数据库。我已经阅读并搜索了类似的主题,但我无法弄清楚我做错了什么。请帮我解决问题。 Apache版本:Apache/2.2.21 (Win32
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我使用 PDO 连接到我的数据库,我不知道哪种方法比更新、删除和插入、PDO::exec 或 PDO::excute 的另一种方法更好。我应该使用哪个? 最佳答案 虽然这两种方法具有相似的命名(exe
如何在 Codeigniter 中设置 PDO 数据库句柄的属性(PDO::ATTR_ERRMODE)? 最佳答案 我认为更好的选择是使用 MY_Model(然后您对其进行扩展,然后它在整个应用程序中
从 mysql 切换到 PDO 我注意到 fetch 方法改变了 PDO 对象本身!例如: $res=$ps->fetchAll(); echo($res[0]['Mail']); //it'ok /
嗨,我正在使用 PDO 为 mysql 开发一个基本的数据库连接类,但是当我 var dump 返回结果时,它告诉我我有 2 个对象:object(PDO)[2]。不应该只有一个吗? 这是迄今为止我的
我是一名优秀的程序员,十分优秀!