Я новичок в 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(); } } ?>
Как исправить уведомление?
Измените свою функцию на:
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; ... }
В противном случае функция не сможет ее увидеть.