我是php的新手,所以我确定这是一个简单的。我得到这个错误
Notice: Undefined variable: conn in C:\Dev\Webserver\Apache2.2\htdocs\EclipsePHP\thecock\php\db.php on line 23
代码
<?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();
}
}
?>
如何修复通知?
答案 0 :(得分:7)
将您的功能更改为:
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();
}
}
您不在函数范围内声明“原始”$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();
}
}
但是如果没有别的办法,你应该这样做。 Globals使调试和维护代码变得困难。
另请参阅Variable scope和why global variables are bad。
修改强>
是的,例如你可以有一个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;
}
}
当然这不是最好的实现;)但它应该给你正确的想法。然后你可以得到连接:
DB::getConnection()
答案 1 :(得分:1)
conn
是一个全局变量。要在函数中访问它:
function getContent($id) {
global $conn;
...
}
否则该功能无法看到它。