PHP 中 PDO 打印出错信息,和 print_r 的位置提前的奇怪表现问题

2017-05-22 23:47:19 +08:00
 xiaoyanbot

print_r($变量,TRUE)

在手册上看到,print_r 有个后面为 TURE 的参数,在 PDO 执行的时候,PHP 手册上推荐的用法是

$db->exec($sql) or die ( '程序运行出错,出错信息:' . print_r( $db->errorInfo(),TRUE ) );

手册上说,print_r 默认第二个参数就是 TRUE,那么说 加不加 TRUE,表现应该是一致的,但是发生了不一致的表现,很奇怪的 位置 表现

推荐的加 TRUE 的正常输出: (假设 SQL 语句出错,模拟一下)

$dsn = "mysql:host=127.0.0.1;dbname=数据库名称";
$db = new PDO($dsn, '数据库用户名', '密码');
$sql = '********';
$db->exec($sql) or die ( '程序运行出错,出错信息:' . print_r( $db->errorInfo(),TRUE ) );

输出是 正常的预期:

程序运行出错,出错信息: Array ( [0] => 23000 [1] => 19 [2] => UNIQUE constraint failed: user.name )

但是如果没有 TURE 参数, 即程序是:

$dsn = "mysql:host=127.0.0.1;dbname=数据库名称";
$db = new PDO($dsn, '数据库用户名', '密码');
$sql = '********';
$db->exec($sql) or die ( '程序运行出错,出错信息:' . print_r( $db->errorInfo() ) );

程序的输出很奇怪, 先出现了 array 打印,再输出了 数字 1

Array ( [0] => 23000 [1] => 19 [2] => UNIQUE constraint failed: user.name ) 程序运行出错,出错信息:1

有哪位大神知道这是咋回事?

2798 次点击
所在节点    PHP
6 条回复
xiaoyanbot
2017-05-22 23:50:25 +08:00
在第二个用法中,

为什么 Array 的 输出会泡在前面去了呢?
qiayue
2017-05-22 23:53:28 +08:00
http://php.net/manual/en/function.print-r.php
第二个参数,默认是 false
pubby
2017-05-23 00:54:33 +08:00
看的什么手册,第二个参数明明默认 false

http://cn.php.net/manual/en/function.print-r.php

mixed print_r ( mixed $expression [, bool $return = false ] )


第二个用法:
print_r 输出内容,然后返回 true
szopen
2017-05-23 09:33:13 +08:00
die 这里可以看成是函数,参数是要打印的信息。所以要先执行 print_r,print_r 然后返回 1
xiaoyanbot
2017-05-23 11:06:25 +08:00
明白啦!
mingyun
2017-05-23 23:21:21 +08:00
@pubby

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX