Уведомление "Неопределенная переменная"

Я новичок в 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(); } } ?> 

Как исправить уведомление?

Related of "Уведомление "Неопределенная переменная""

Измените свою функцию на:

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

Но вы должны это делать, если нет другого пути. Глобалы затрудняют отладку и поддержку кода.

См. Также Область переменных и почему глобальные переменные являются плохими .

Редактировать:

Да, например, у вас может быть класс 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() 

conn – глобальная переменная. Чтобы получить доступ к ней в рамках функции:

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

В противном случае функция не сможет ее увидеть.