需求

在PHP开发过程中,用到了PDO连接数据库,开发过程中,经常要用到查看刚刚执行的SQL是否正确的问题,显示最后一条执行的SQL语句,用什么方法来实现呢?

方案

答案是:使用PDOStatement提供的debugDumpParams()函数来打印出刚刚执行的SQL语句;

简介

PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令(PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)

语法

1
2
3


bool PDOStatement::debugDumpParams ( void )

直接打印出一条预处理语句包含的信息。提供正在使用的 SQL 查询、所用参数(Params)的数目、参数的清单、参数名、用一个整数表示的参数类型(paramtype)、键名或位置、值、以及在查询中的位置(如果当前 POD 驱动不支持,则为-1)。

此为一个用于调试的功能,在正常输出的情况下直接输出数据。

提示: 和直接将结果输出到浏览器一样,可使用输出控制函数来捕获当前函数的输出,然后(例如)保存到一个 string 中。

只打印此时此刻语句中的参数。额外的参数不存储在语句中,也就不会被输出。

返回值

没有返回值。

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


/* 通过绑定 PHP 变量执行一条预处理语句 */





$calories = 150;





$colour = 'red';





$sth = $dbh->prepare('SELECT name, colour, calories





FROM fruit





WHERE calories < :calories AND colour = :colour');





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





$sth->bindValue(':colour', $colour, PDO::PARAM_STR, 12);





$sth->execute();





$sth->debugDumpParams();





?>

关键语句

1
2
3


$sth->debugDumpParams();

以上例程会输出:

 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


SQL: [96] SELECT name, colour, calories





FROM fruit





WHERE calories < :calories AND colour = :colour





Params: 2





Key: Name: [9] :calories





paramno=-1





name=[9] ":calories"





is_param=1





param_type=1





Key: Name: [7] :colour





paramno=-1





name=[7] ":colour"





is_param=1





param_type=2