“未定义变量”通知

时间:2010-01-27 10:28:46

标签: php

我是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();  
    } 
} 
?>

如何修复通知?

2 个答案:

答案 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 scopewhy 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;
  ...
}

否则该功能无法看到它。