dppi5167 2013-02-27 10:07
浏览 24
已采纳

为什么连接使用包含一次失败与pdo失败?

Why Connecting using include once is failing with pdo?
When I connect to the database including a connection page it gave me an error, but when I put the connecting code in and I remove include I do not get errors. What might be the problem?

Error Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\tish\A\view.php on line 167

Connecting page:

<?php
  function connected_Db(){
    try {
      $con = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root','');
    } catch(PDOException $e){
      echo 'Connection failed'.$e->getMessage();
    }
  }
  connected_Db();
?>

the way I include it in other pages:

include_once('pdo.inc.php');
connected_Db();
global $con;
  • 写回答

4条回答 默认 最新

  • dpzff20644 2013-02-27 10:13
    关注

    You can't make a function variable global from the global scope. The variable $con has long been GC'ed: it's deallocated once the function has returned. Try this:

    function connected_Db()
    {
       return new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root','');
    }
    //global scope:
    $con = connect_Db();
    

    If you insist on using the global keyword, which is not a great idea, you should've used it like this:

    function connected_Db()
    {
        global $con;//use the global var, set at top of function
        $con = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root','');
    }
    $con = null;// declare global var (optional, but a notice will be issued if not declared)
    connect_Db();
    var_dump($con);
    

    As you can see, I have -like deceze and YourCommonSense suggested- removed the try-catch block (which you don't need here). It also goes to show that you don't really need the function call either. Your script would work perfectly fine (or marginally faster even) if you were to write this:

    //global scope (or whatever scope you need it to be)
    $con = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf8','root','');
    

    That way, you're not calling a function that needn't be called.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab