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 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿