-2

我熟悉创建程序风格的 PHP 函数来从数据库中选择信息,但是在切换到使用面向对象的准备好的 SQL 语句时,我的函数不再工作了。我还没有像我做程序 PHP 那样理解 OOP,并且正在努力学习,所以这是我的问题:

这按预期工作:

if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
    $stmt->bind_param("s", $city);
    $city = 'la';
    $stmt->execute();
    $stmt->bind_result($state);
    $stmt->fetch();
    $stmt->close();
    echo $state;
}

然而,这不会:

function get_state( $city ) {
if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($state);
        $stmt->fetch();
        $stmt->close();
        echo $state;
    }
}

get_state('la');

这两个示例都需要数据库 mysqli 连接,但功能版本由于某种原因不起作用,我做错了什么?

4

4 回答 4

1

该变量$mysqli超出了函数的范围。如果您不想将其作为参数传递给函数,则必须将其声明为全局。

function get_state( $city ) {
    global $mysqli;

    if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($state);
        $stmt->fetch();
        $stmt->close();
        echo $state;
    }
}

get_state('la');

函数外部可用的变量不能在用户定义的函数中访问,除非它被声明为全局变量或将其作为参数传递给函数。

于 2012-12-20T07:40:09.523 回答
0

您应该做的第一件事是启用错误报告。这将告诉您您正在prepare对不是对象 () 的对象调用方法 ( mysqli),因为函数范围内不存在 $mysqli。您必须将 $mysqli 传递给您的函数或设计一些其他机制来说明函数如何访问该变量。

于 2012-12-20T07:13:44.907 回答
0

传递$mysqliin 参数,并将mysqli连接对象传递给查询。

于 2012-12-20T07:16:29.170 回答
0

$mysqli没有定义,我猜。参见范围手册

于 2012-12-20T07:15:13.643 回答