0

この関数を複数回呼び出すと問題が発生します

インデックス.php

<?php
function check_status($id){
require_once ('inc/connect.php');
try {

$query = $db->prepare('SELECT `usage` FROM `room` WHERE `id` = :id');
$query->execute(array(':id' => $id));
$row = $query ->fetch(PDO::FETCH_NUM);
}catch (PDOException $e) {
   exit($e->getMessage());
}

if($row[0]>0) {
$msg = 'Room: Closed'; }
else {
$msg = 'Room: Opened'; }

echo $msg;

 $db = null; 
}
?>
<body>
        <?php echo check_status("1"); ?>
        <?php echo check_status("2"); ?>
</body>

Connect.php

<?php
$dbhost = ('localhost');
$dbname = ('db_name');
$dbuser = ('user_name');
$dbpass = ('test');
$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
?>

最初の呼び出しは正常に機能しますが、2 番目の呼び出しでは次のエラーが発生します。

Fatal error: Call to a member function prepare() on a non-object in /home/public_html/index.php on line 6 

これを行う最良の方法は何ですか?

4

1 に答える 1

0

あなたの機能はひどいです: クエリを実行するたびにデータベースに接続するべきではありません。多くのリソースを消費します。グローバルな $db 変数を作成して、どこでも再利用してください:

require_once ('inc/connect.php');
function check_status($id){
    global $db;
    try {
    ...
    }

    //remove $db = null;
}
于 2013-11-05T06:57:10.273 に答える