【问题标题】:MySQL connection doesn't exist | PHP & MySQLMySQL 连接不存在 | PHP 和 MySQL
【发布时间】:2016-05-27 15:44:23
【问题描述】:

我写了一些代码,我正在调用(需要函数).php 文件,它将连接到 MySQL 库。该文件(不是用于 MySQL 连接的文件)我调用其他文件是因为我想打开一个连接一次,然后关闭它一次。错误说

未定义变量:第 21 行 C:\Program Files\WAMP\www\hsync_hsync_scripts_hsync_pristup.php 中的 _hsync_konekcija

_hsync_pristup.php 文件

<?php

require('_hsync_scripts/_hsync_baza.php');

function _hsync_pristup()
{
    session_start();

    if(isset($_COOKIE['_hsync_prijavljen'])) $_hsync_id = $_COOKIE['_hsync_prijavljen']; // PRIJAVLJEN
    else if(isset($_SESSION['_hsync_sess_prijavljen'])) $_hsync_id = $_SESSION['_hsync_sess_prijavljen']; // PRIJAVLJEN
    else
    {
        $_hsync_pristup_info = array(
            '_hsync_pristup' => 0
        );

        $_hsync_konekcija->close();
        return ($_hsync_pristup_info);
    }

    /* THIS LINE */ $_hsync_statment = $_hsync_konekcija->prepare("SELECT Zakljucan, Ime, Skin FROM $_hsync_usr WHERE ID = ?"); // LINE 21
    $_hsync_statment->bind_param("i", $_hsync_id);
    $_hsync_statment->execute();
    $_hsync_rezultat = $_hsync_statment->get_result();

    if($_hsync_rezultat->num_rows == 0) // OBIRSAN RAČUN
    {
        $_hsync_pristup_info = array(
            '_hsync_pristup' => -1
        );

        session_unset();
        session_destroy();
        setcookie("_hsync_prijavljen", null, -1, "/");

        $_hsync_statment->close();
        $_hsync_rezultat->close();
        $_hsync_konekcija->close();
        return ($_hsync_pristup_info);
    }

    $_hsync_podatci = $_hsync_rezultat->fetch_assoc();
    if($_hsync_podatci["Zakljucan"] != 0) // ZAKLJUČAN RAČUN
    {
        session_unset();
        session_destroy();
        setcookie("_hsync_zakljucan", $_hsync_id, time() + 8, "/");
        setcookie("_hsync_zakljucan_zap", rand(6, 16), time() + 8, "/");
        setcookie("_hsync_prijavljen", null, -1, "/");

        $_hsync_pristup_info = array(
            '_hsync_pristup' => -2
        );

        $_hsync_statment->close();
        $_hsync_rezultat->close();
        $_hsync_konekcija->close();
        return ($_hsync_pristup_info);
    }
    else
    {
        $_hsync_ime = $_hsync_podatci['Ime'];
        $_hsync_skin = $_hsync_podatci['Skin'];
    }

    $_hsync_statment = $_hsync_konekcija->prepare("SELECT ServerID FROM $_hsync_srv_online WHERE ID = ?");
    $_hsync_statment->bind_param("i", $_hsync_id);
    $_hsync_statment->execute();
    $_hsync_rezultat = $_hsync_statment->get_result();

    if($_hsync_rezultat->num_rows != 0) // PRIJAVLJEN NA GAME SERVERU
    {
        $_hsync_podatci = $_hsync_rezultat->fetch_assoc();
        $_hsync_serverid = $_hsync_podatci["ServerID"];

        session_unset();
        session_destroy();
        setcookie("_hsync_prijavljen", null, -1, "/");
        setcookie("_hsync_online", $_hsync_id, time() + 8, "/");
        setcookie("_hsync_online_id", $_hsync_serverid, time() + 8, "/");

        $_hsync_pristup_info = array(
            '_hsync_pristup' => -3
        );

        $_hsync_statment->close();
        $_hsync_rezultat->close();
        $_hsync_konekcija->close();
        return ($_hsync_pristup_info);
    }

    if(isset($_COOKIE['_hsync_zabrana'])) return (-4); // IMA ZABRANU PRISTUPA
    else // NEMA ZABRANU
    {
        $_hsync_statment = $_hsync_konekcija->prepare("SELECT ID FROM $_hsync_srv_bnds WHERE ID = ? AND Aktivno = 1"); // TRAŽI DALI JE IMA
        $_hsync_statment->bind_param("i", $_hsync_id);
        $_hsync_statment->execute();
        $_hsync_rezultat = $_hsync_statment->get_result();

        if($_hsync_rezultat->num_rows > 0) // IMA ZABRANU
        {
            session_unset();
            session_destroy();
            setcookie("_hsync_prijavljen", null, -1, "/");
            setcookie("_hsync_zabrana", $_hsync_id, time() + 31536000, "/");

            $_hsync_pristup_info = array(
                '_hsync_pristup' => -4
            );

            $_hsync_statment->close();
            $_hsync_rezultat->close();
            $_hsync_konekcija->close();
            return ($_hsync_pristup_info);
        }
    }

    $_hsync_datum = date("d. m. Y.");
    $_hsync_vrijeme = date("H:i:s");

    $_hsync_statment = $_hsync_konekcija->prepare("UPDATE $_hsync_usr SET DatumhSync = ?, VrijemehSync = ? WHERE ID = ?");
    $_hsync_statment->bind_param("ssi", $_hsync_datum, $_hsync_vrijeme, $_hsync_id);
    $_hsync_statment->execute();

    $_hsync_pristup_info = array(
        '_hsync_pristup' => 1,
        '_hsync_ime' => $_hsync_ime,
        '_hsync_id' => $_hsync_id,
        '_hsync_skin' => $_hsync_skin
    );

    return ($_hsync_pristup_info);
}

?>

其他文件

require('_hsync_scripts/_hsync_pristup.php'); // FRIST LINE ON THE TOP OF FILE

我不知道为什么 PHP 说连接变量不存在。 require('_hsync_scripts/_hsync_baza.php'); 在顶部,所以它是全球性的,对吧?

【问题讨论】:

  • 向我们展示您的其他文件。
  • 这是一个变量范围问题。如果要在函数内部使用$_hsync_konekcija,则需要在函数内部声明,作为参数传入,或者声明为全局函数。您必须在函数内显式声明全局变量才能使用它们 - 只需将其放在文件顶部不会影响任何内容
  • @AndrewCheong 其他文件是 index.php。函数_hsync_pristup() 检查用户是否登录。我是 PHP 新手,但我认为其他文件无济于事,因为错误在 _hsync_pristup.php 中
  • 看起来像“$_hsync_konekcija->close();”被调用,但从未调用过连接。 (第 18 行)
  • @SilvioCro - 你得问问 PHP 和 PAWN 的设计者。这就是全局变量在 PHP 中的工作方式。

标签: php mysql


【解决方案1】:

如果 _hsync_konekcija 是全局的,那么告诉函数!在函数中访问它之前,把

global $_hsync_konekcija;

查看http://php.net/manual/en/language.variables.scope.php 以获得对变量范围的更完整描述。

【讨论】:

  • global $_hsync_konekcija = new mysqli(...); PHP 说Parse error: syntax error, unexpected '=', expecting ',' or ';'
  • @SilvioCro 这不是答案所说的。
  • @JonStirling 那我不明白你。那我将如何连接到基地?
  • @SilvioCro 重新阅读答案,阅读链接到的文档。所有信息都在那里。
  • @JonStirling 我使用面向对象的 PHP。我尝试的任何方式都没有做任何事情。还是同样的错误和问题。
【解决方案2】:

我认为这是一个范围界定问题。基本上,您的函数无法访问在其外部实例化的局部变量(您从文件中包含的变量)。

真的有两个选择。

1) 在您的函数中需要“_hsync_baza.php”文件。

<?php
function _hsync_pristup(){
    session_start();
    require('_hsync_scripts/_hsync_baza.php');
    ...
}

2)“使用”你需要的变量。

<?php
require('_hsync_scripts/_hsync_baza.php');

function _hsync_pristup() use ($_hsync_konekcija, $_hsync_SOMETHING_ELSE, ..){
   ...
}

作为最后的建议,我会将 session_start() 调用从您的函数中删除到文件顶部。 $_SESSION 变量是“SUPER GLOBALS”,因此尽管是从函数外部初始化的,但仍可以从函数内部访问它们。

希望对你有帮助

【讨论】:

  • 我喜欢第一个选项,但是我需要多次连接到基地。第一个链接将在_hsync_pristup() 中,第二个将在index.php 中。一次可以连接,为什么还要连接两次?我也在 index.php require('_hsync_scripts/_hsync_baza.php'); require('_hsync_scripts/_hsync_pristup.php'); 中尝试了这个,包括第一个基础,然后是函数文件。我坚信这会奏效。
猜你喜欢
  • 2012-10-07
  • 2020-04-15
  • 2011-03-04
  • 1970-01-01
  • 2013-08-18
  • 2013-03-08
  • 2013-12-27
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多