我是php的新手,所以我确定这是一个简单的.我得到这个错误
Notice: Undefined variable: conn in C:\Dev\Webserver\Apache2.2\htdocs\EclipsePHP\thecock\php\db.php on line 23
Run Code Online (Sandbox Code Playgroud)
这个代码
<?php
$host = "localhost"; $database = "dbname"; $username = "user"; $password = "pass";
$conn = new mysqli($host, $username, $password, $database);
if (! $conn) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}else{
echo("all ok!");
}
function getContent($id) {
$sql = "SELECT content FROM blocktext WHERE id=$id";
if ($rs = $conn->query($sql)) { # line 23
if ($row = $rs->fetch_assoc()) {
echo stripslashes($row['content']);
}
$rs->close();
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我该如何修复通知?
将您的功能更改为:
function getContent($id, $conn) {
$sql = "SELECT content FROM blocktext WHERE id=$id";
if ($rs = $conn->query($sql)) {
if ($row = $rs->fetch_assoc()) {
echo stripslashes($row['content']);
}
$rs->close();
}
}
Run Code Online (Sandbox Code Playgroud)
您不在$conn函数范围内声明"原始" .在函数内部,您只能访问函数内部声明的变量或通过参数提供的变量.
另一种方法是global在函数中声明变量:
function getContent($id) {
global $conn;
$sql = "SELECT content FROM blocktext WHERE id=$id";
if ($rs = $conn->query($sql)) {
if ($row = $rs->fetch_assoc()) {
echo stripslashes($row['content']);
}
$rs->close();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果没有别的办法,你应该这样做.Globals使调试和维护代码变得困难.
编辑:
是的,例如你可以拥有一个DB类:
class DB {
private static $conn = null;
public static function getConnection() {
if (is_null(DB::$conn)) {
$host = "localhost"; $database = "dbname"; $username = "user"; $password = "pass";
DB::$conn = new mysqli($host, $username, $password, $database);
}
return DB::$conn;
}
}
Run Code Online (Sandbox Code Playgroud)
当然这不是最好的实现;)但它应该给你正确的想法.然后你可以获得连接:
DB::getConnection()
Run Code Online (Sandbox Code Playgroud)