"Tanımsız Değişken"

2 Cevap

Php için yeni im kadar bu kolay bir tanesidir emin im. Im bu hatayı alıyorum

Notice: Undefined variable: conn in C:\Dev\Webserver\Apache2.2\htdocs\EclipsePHP\thecock\php\db.php on line 23

Bu kod için

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

Ben nasıl haber düzeltebilirim?

2 Cevap

Lütfen fonksiyonu değiştirin:

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

Sen fonksiyonu kapsamında $conn "orijinal" ilan yok. Fonksiyonu içinde sadece işlev içinde bildirilen veya parametreler üzerinden sağlanan değişkenlere erişebilirsiniz.

Başka bir yolu işlevi global olarak değişkeni bildirmek olacaktır:

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

Başka yolu yok Ama eğer sadece, bunu yapmanız gerekir. Globals zor kod hata ayıklama ve bakımını yapmak.

Variable scope ve why global variables are bad Ayrıca bkz.

Edit:

Evet mesela Bir DB sınıf var:

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;
   }
}

Tabii ki bu iyi bir uygulama değildir ;) Ama size doğru bir fikir vermelidir. Sonra bağlantı alabilirsiniz:

DB::getConnection()

conn bir global değişkendir. Bir işlev içinde erişmek için:

function getContent($id) { 
  global $conn;
  ...
}

Aksi takdirde fonksiyon göremiyorum.