Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP与程序MySQL函数参考_Php_Mysqli_Prepared Statement - Fatal编程技术网

PHP OOP与程序MySQL函数参考

PHP OOP与程序MySQL函数参考,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我熟悉创建过程式PHP函数来从数据库中选择信息,但在切换到使用面向对象的SQL语句时,我的函数不再工作。我还没有像理解过程PHP那样理解OOP,我正在努力学习,所以这是我的问题: 这与预期的效果一样: if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) { $stmt->bind_param("s", $city); $city = 'la'; $stmt->

我熟悉创建过程式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连接,但函数版本由于某种原因无法工作,我做错了什么?

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

我想没有定义。请参见

在参数中传递
$mysqli
,同时传递要查询的
mysqli
连接对象。

变量
$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');

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

您所说的“不工作”到底是什么意思?它是给了您一个错误,还是没有给您预期的结果?@Supericy第一个示例从数据库返回结果,而函数版本根本不返回任何结果。