为了账号安全,请及时绑定邮箱和手机立即绑定

pdo连接数据库失败?为null?

pdo连接数据库失败?为null?

unclePig 2016-08-23 10:22:20
这是我的测试代码部分,不写成函数,就可以连接,把pdo连接的语句,写成函数后就连接不了数据库了。图是代码 和浏览器打印结果<?php header('content-type:text/html;charset=utf8'); //链接数据库 //1.非函数,成功连接 try{ $dsn='mysql:host=localhost;dbname=cyotel'; $username='root'; $password='root'; $pdo=new PDO($dsn,$username,$password); //打印连接结果 }catch(PDOException $e){ echo $e->getMessage(); } var_dump($pdo); //2.函数,连接失败 function connect(){ try{ $dsn='mysql:host=localhost;dbname=cyotel'; $username='root'; $password='root'; $pdo2=new PDO($dsn,$username,$password); //打印连接结果 }catch(PDOException $e){ echo $e->getMessage(); } } connect(); var_dump($pdo2); ?>下面是浏览器打印结果1.object(PDO)[1]2.nullphp新手 跪求大神~
查看完整描述

1 回答

已采纳
?
揍扁扁了

TA贡献11条经验 获得超4个赞

(1) 变量的作用范围。在函数中声明的变量就是局部变量,只能在自己的函数内部使用。将过程式转变为函数式后,$pdo2就属于是局部变量了,在函数之外调用,自然没结果。

(2)函数的返回值概念。函数可以有返回值,用于在函数之外得到函数内的变量。用return 返回 。这样~~

function connect(){
try{
$dsn='mysql:host=localhost;dbname=cyotel';
$username='root';
$password='root';
$pdo2 = new PDO($dsn,$username,$password);
return $pdo2;
//打印连接结果
}catch(PDOException $e){
echo $e->getMessage();
}
}
$pdo = connect();
var_dump($pdo);

(3) 我也是个新手,一起努力呀~~

查看完整回答
1 反对 回复 2016-08-23
  • unclePig
    unclePig
    把$pdo设为全局变量也可以,,,哪个好点?
  • 揍扁扁了
    揍扁扁了
    如果因为作用域声明全局变量那会导致越来越多的全局变量,维护啊什么的都不方便,但是主要还是觉得没什么必要吧,毕竟函数内的结果大部分不会在全局用到。不过像这种pdo资源类型的数据,可以用一个单例模式来设计一下,我也是在慕课网上看到的这个课程,因为这样可以避免大量的new操作,节省资源。
  • 揍扁扁了
    揍扁扁了
    如果因为作用域声明全局变量那会导致越来越多的全局变量,维护啊什么的都不方便,但是主要还是觉得没什么必要吧,毕竟函数内的结果大部分不会在全局用到。不过像这种pdo资源类型的数据,可以用一个单例模式来设计一下,我也是在慕课网上看到的这个课程,因为这样可以避免大量的new操作,节省资源。
点击展开后面1
  • 1 回答
  • 0 关注
  • 2071 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信