PHP OOP与程序MySQL函数参考
我熟悉创建过程式PHP函数来从数据库中选择信息,但在切换到使用面向对象的SQL语句时,我的函数不再工作。我还没有像理解过程PHP那样理解OOP,我正在努力学习,所以这是我的问题: 这与预期的效果一样: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->
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第一个示例从数据库返回结果,而函数版本根本不返回任何结果。