使$ dbh1(数据库句柄)可用于所有php文件 [英] Make $dbh1(database handle) available to all php files

查看:329
本文介绍了使$ dbh1(数据库句柄)可用于所有php文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有问题使$ dbh1可用于需要查询的所有php文件。我尝试在这个文件中使用global $ dbh1,其中查询将运行。

I have problem making $dbh1 available to all php files that need it for querying. I tried using "global $dbh1" in this file where querying would run.

我有4个文件:testswitchDB3.php(main),testconnect.php,login.php和testnumcards.php

I have 4 files: testswitchDB3.php(main), testconnect.php, login.php and testnumcards.php

一旦数据库由login.php和testconnect.php运行连接。
这两个文件都正常工作

Once database is connected as run by login.php and testconnect.php. Both files are working

因此,$ dbh1是通过将global $ dbh1应用到testnumcards.php来创建和可用的。

Thus $dbh1 is created and available by applying "global $dbh1" to testnumcards.php.

但它不工作。以下是我的代码。

But it does not work. Following are my codes.

<!DOCTYPE html>
<html>
<head>
    <title>Test the switching responses between databases using buttons</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="../dojo1_8/dijit/themes/soria/soria.css"/>
    <link rel="stylesheet" href="../common.css"/>
    <style type="text/css">
        html, body 
    {
            width: 100%;
            height: 100%;
            margin: 5px;
            padding: 0px;
            overflow: hidden; /* No Scrollbar */
        }
    </style>
    <script>            
    var dojoConfig =
        {
              parseOnLoad: true,
              isDebug: true,
              async: true,//
              locale : "en-us"//
        }; 
    </script>
    <script src='../dojo1_8/dojo/dojo.js'></script>
</head>

<body class="soria">
<div id="main_bContainer" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'sidebar'">
<div id="cp_Center" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
<table>
    <tr>
     <td>
      <div id=btn1></div><!--for testdata2060_03-->
     </td>
     <td>
      <div id=btn2></div><!--for testdata2060_10-->
     </td>
     <td>
      <div id=btn3></div><!--for testdata2060_05-->
     </td>
    </tr>
    <tr>
     <td>
      <div id=btn4></div><!--for testdata2060_03-->
     </td>
     <td>
      <div id=btn5></div><!--for testdata2060_10-->
     </td>
     <td>
      <div id=btn6></div><!--for testdata2060_05-->
     </td>
    </tr>
    <tr>
     <td>
      <div id=btn7></div><!--for testdata2060_03-->
     </td>
     <td>
      <div id=btn8></div><!--for testdata2060_10-->
     </td>
     <td>
      <div id=btn9></div><!--for testdata2060_05-->
     </td>
    </tr>
 </table>
<div id=statement></div>
</div><!--cp_Center-->
</div><!--main_bContainer-->

<script>
    require(["dojo/parser", "dijit/layout/BorderContainer", "dijit/form/Button",
    "dojo/on", "dijit/form/Select", "dojo/store/Memory", "dojo/request", 
    "dojo/dom", "dojo/dom-construct", "dojo/domReady!"],
    function(parser, BorderContainer, Button, on, Select, Memory, request, dom, 
    domConstruct)
    {var commonDB = "nameless"; function connect(commonDB)
        {request.post("testconnect.php",
            {data:{nameDB : commonDB}
            //,handleAs:"json"//without the use of "handleAs:JSON" as it needs only 
            confirnation or not 
             }).then
        (function(connect)
            {console.debug("data read as: ", connect);
    if(connect)//as true or false as indicated in login.php 
            {alert("Successfully login and connected");
            switch(commonDB)
                {
                 case 'testdata2060_03':
                    btn4.set('disabled', false);
                    btn5.set('disabled', true);
                    btn6.set('disabled', true);
                    btn7.set('disabled', false);
                    btn8.set('disabled', true);
                    btn9.set('disabled', true);
                    break;
                 case 'testdata1970_11':
                    btn4.set('disabled', true);
                    btn5.set('disabled', false);
                    btn6.set('disabled', true);
                    btn7.set('disabled', true);
                    btn8.set('disabled', false);
                    btn9.set('disabled', true);
                    break;
                 case 'testdata1970_05':
                    btn4.set('disabled', true);
                    btn5.set('disabled', true);
                    btn6.set('disabled', false);
                    btn7.set('disabled', true);
                    btn8.set('disabled', true);
                    btn9.set('disabled', false);
                    break;
                }}  
             else
                alert("Attempt to login and connect is NOT successful");
                },


            (
              function(error)
                {
                    alert("Test's Error:"+error);
                    console.debug(error);
                }
        );
       }

       function card(commonDB)
        {request.post("testnumcards.php",
          {
          //{data:{xxx:yyy},
           handleAs: "json"
          }).then
         (function(response)
             {alert("The number of the distinct catds for "+commonDB+" is "+response);
               dom.byId("statement").innerHTML = "The number of the distinct catds for
               "+commonDB+" is "+response;
              },
          function(error)
              {alert("Test's Error:"+error);
               console.debug(error);
              }
         )}

/*
function test()
{
}
*/

var btn1 = new Button // Button, not button
({  label: "testdata2060_03",
    onClick: function()
     {
         console.log("Console Log: Button1 has been clicked.");
         connect('testdata2060_03');
     }
 },"btn1"); 
btn1.startup();

var btn2 = new Button
({label: "testdata1970_11"
 },"btn2");
btn2.startup();

var btn3 = new Button
({label: "testdata1970_05"
  },"btn3");
btn3.startup();

var btn4 = new Button // Button, not button
({label: "Number of cards",
    disabled: true
 },"btn4"); 
btn4.startup();

var btn5 = new Button
({label: "Number of cards",
    disabled: true
 },"btn5");
btn5.startup();

var btn6 = new Button
({label: "Number of cards",
    disabled: true
 },"btn6");
btn6.startup();

var btn7 = new Button // Button, not button
({label: "Number of tests",
    disabled: true
 },"btn7"); 
btn7.startup();

var btn8 = new Button
({label: "Number of tests",
   disabled: true
},"btn8");
btn8.startup();

var btn9 = new Button
({label: "Number of tests",
   disabled: true
},"btn9");
btn9.startup();

/*on(btn1, 'click', function()
{console.log("Console Log: Button1 has been clicked.");
 connect('testdata2060_03');
});
*/

on(btn2, 'click', function()
{console.log("Console Log: Button2 has been clicked.");
connect('testdata1970_11');
});

on(btn3, 'click', function()
{console.log("Console Log: Button3 has been clicked.");
connect('testdata1970_05');
});

on(btn4, 'click', function()
{console.log ("Console Log: Button4 has been clicked.");
card();
});

on(btn5, 'click', function()
{console.log("Console Log: Button5 has been clicked.");
test();
});

on(btn6, 'click', function()
{console.log("Console Log: Button6 has been clicked.");
card();
});

on(btn7, 'click', function()
{console.log("Console Log: Button7 has been clicked.");
test();
});

on(btn8, 'click', function()
{console.log("Console Log: Button8 has been clicked.");
card();
});

on(btn9, 'click', function()
{console.log("Console Log: Button9 has been clicked.");
test();
});

});
</script>
</body>

<?php
global $dbh1;
$dbname = $_POST['nameDB']; 
require_once '../scripts/login.php';
echo $connect;
?>



下一页是login.php



Next is login.php

<?php
    global $dbname;
    global $dbh1;

    $dbh1 =  null; 
    $dsn ="mysql:host=localhost; dbname=$dbname";
    $user ='root';
    $pswd ='';

 try
    {
     $dbh1 = new PDO($dsn, $user, $pswd, array(PDO::ATTR_TIMEOUT => "10",// 10 seconds
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); // connect to DB, declared as global variable!
     $connect = TRUE;
    }

catch(PDOException $err)
    {
     $alertmsg = $err->getMessage();
     $connect = FALSE;
    }

echo $connect;      
?>



接下来是testnumcards.php



Next is testnumcards.php

<?php
 global $dbh1;

 $stmt = $dbh1->prepare("select count(distinct mfg_code)as mfg_code from test");

 try
  {
    $stmt->execute();
  }

catch(PDOException $err)
 {
   $alertmsg = $err->getMessage();
 }

$num = $stmt->fetch(PDO::FETCH_ASSOC);
echo $num['mfg_code'];

?>

您可以参考 JsFiddle 供您参考,但如果不支持PHP,则无法使用。

You can refer to JsFiddle for your reference though it cannot be used without PHP support.

推荐答案

您需要使用

<?php
require("login.php"); 

,以便他们能够使用连接,除非这些脚本已经被包含或要求该文件。

in all of your php scripts for them to be able to use a connection unless those scripts have already been include or required that file.

每个请求都必须创建连接,当请求结束时,连接关闭。所以当你请求testnumcards.php没有$ dbh1声明全局,因为它尚未设置在该请求

The connection has to be created every request as when a request ends, the connection is closed. so when you request testnumcards.php there is no $dbh1 to declare global as it has not been set up on that request

编辑

每次向需要重新创建连接的服务器发送新请求并设置变量时,PHP是一种特定于请求的语言,一页不了解创建的资源在另一个页面中,所有资源都在请求之间关闭。

PHP is a request specific language every time you send a new request to the server it needs to create connections again and set up variables, one page has no knowledge of resources that were created in another page as all resources are closed between requests.

所以如果我去page1.php并连接到一个数据库,当我后来去page2.php它有没有连接到数据库,除非我再次创建该连接。当page1.php完成,然后连接关闭后,您需要再次连接到page2.php

So if I go to page1.php and connect to a database, when I later go to page2.php it has no connection to the database unless I create that connection again. When page1.php has finished and then the connection is closed, You then need to connect again in page2.php

这就是为什么大多数脚本首先要求一个文件设置他们需要的任何连接或其他资源

This is why most scripts start by requiring a file that sets up any connections or other resources they need

这篇关于使$ dbh1(数据库句柄)可用于所有php文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆