Php 错误:";mysqli_query()要求参数1为mysqli,在“…”中为空;

Php 错误:";mysqli_query()要求参数1为mysqli,在“…”中为空;,php,mysql,mysqli,Php,Mysql,Mysqli,我的PHP代码中有些东西不起作用。函数db\u query()中的函数mysqli\u query()无法访问先前定义的变量链接。为什么? <?php $link = mysqli_connect($hostname, $username, $password,$database); function db_query($sql) { return mysqli_query($link ,$sql); } db_query('SELECT name FROM users LIM

我的PHP代码中有些东西不起作用。函数
db\u query()
中的函数
mysqli\u query()
无法访问先前定义的变量
链接
。为什么?

<?php
$link = mysqli_connect($hostname, $username, $password,$database);

function db_query($sql) {
    return mysqli_query($link ,$sql);
}

db_query('SELECT name FROM users LIMIT 1');
这是一个范围问题

必须是函数db\u query($db\u conn,$sql){

这是一个范围问题

必须是函数db\u query($db\u conn,$sql){

我希望这能奏效


我希望这对将来研究这个问题的人有用:

在PHP中,您不能像上面看到的那样访问函数之外的变量

去了解更多

对于这个问题有很多解决方案,但我更喜欢在这里向您展示的解决方案(包括PDO)。如果您创建一个类并在创建此实例的新对象时初始化连接,那么以后查询sql将非常容易

<?php
class Users {
    private $_conn;
    public function __construct() {
        //initialize the connection
        $this->_conn = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8', USERNAME, PASSWORD);
    }

    public function __destruct() {
        //close the connection when the database connection is not needed anymore
        $this->_conn = null;  
    }

    public function do_something() {
        $this->_conn->query("SELECT name FROM users LIMIT 1");
    }
}

$users = new Users();    //initialize the new object Users
$users->do_something();

对于将来关注此问题的人:

在PHP中,您不能像上面看到的那样访问函数之外的变量

去了解更多

对于这个问题有很多解决方案,但我更喜欢在这里向您展示的解决方案(包括PDO)。如果您创建一个类并在创建此实例的新对象时初始化连接,那么以后查询sql将非常容易

<?php
class Users {
    private $_conn;
    public function __construct() {
        //initialize the connection
        $this->_conn = new PDO('mysql:host=localhost;dbname=DBNAME;charset=utf8', USERNAME, PASSWORD);
    }

    public function __destruct() {
        //close the connection when the database connection is not needed anymore
        $this->_conn = null;  
    }

    public function do_something() {
        $this->_conn->query("SELECT name FROM users LIMIT 1");
    }
}

$users = new Users();    //initialize the new object Users
$users->do_something();


我曾经听说过一些关于全局变量的事情,这就是你的意思吗?看起来你需要将
$db_conn
作为参数传递给
db_query
函数,而不是将其用作全局变量。它不在函数的范围内。@user3389375你可能想了解一下:…全局变量几乎总是一个b广告创意。请不要在问题中编辑解决方案。如果您有与其他人提供的答案不同的内容,请添加您自己的答案。我曾经听说过一些全局变量,这就是您的意思吗?看起来您需要将
$db_conn
作为参数传递给
db_query
函数,而不是使用它作为全局变量。它不在函数的作用域内。@user3389375您可能想了解一下:…全局变量几乎总是一个坏主意。请不要在问题中编辑解决方案。如果您有与其他人提供的答案不同的内容,请添加您自己的答案。但是如果我想调用函数,我只需要nt说db_查询(“选择…”);@user3389375,为什么?为什么不把连接传给它?我想说db_查询(“选择…”)比总是写db_查询要容易得多($db_conn,“选择…”);因为我有大量其他函数组成db_查询function@user3389375然后您需要考虑将这些绑定到一个类中,该类在构建时只需要一次连接:
$db=newdatabase($conn);$db->query('SELECT…')
@user3389375这是建议的方法,你不应该使用global,传递参数是正确的方法。但是如果我想调用函数,我只想说db_query(“选择…”);@user3389375,为什么?为什么不把连接传递给它?我想说db_query(“选择…”)会容易得多;而不是总是编写db_查询($db_conn,“SELECT…”);因为我有大量其他函数组成db_查询function@user3389375然后您需要考虑将这些绑定到一个类中,该类在构建时只需要一次连接:
$db=newdatabase($conn);$db->query('SELECT…')
@user3389375这是建议的方法,您不应该使用global,传递参数是正确的方法。