Почему ошибка Warning: Undefined variable $db in?

Добрый день. Есть код:
<?php
require $_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php';

function CheckDestiny ($variable,$type) {
    if ($type == "ONE") {
        switch ($variable) {
        case $variable > 100000 and $variable < 249999:
            echo "QUERY 1";
            $add_destiny = mysqli_query($db, "UPDATE `data` SET `column` = '$variable; WHERE `symbol` = '$db_symbol[$t]'");            
            break;
        case $variable > 250000 and $variable < 499999:   
            echo "QUERY 2";
            break;                     
        }
    }  
}

    $search_destiny = mysqli_query($db, "SELECT * FROM `items` ORDER BY `id` LIMIT 0,35");
	
    while ($select_destiny = mysqli_fetch_assoc($search_destiny)) 
	{ $db_ticker[] = $select_destiny['name']; 
	  $db_symbol[] = $select_destiny['sym'];
	  $db_price[] = $select_destiny['price'];
	}

    for ($t = 0; $t < count($db_symbol); $t++) {
        echo $t . ". - " . $db_symbol[$t] . " == Цена <b>" . $db_price[$t] . "</b> <br>";
		
		// ....... etc
		
        CheckDestiny($sum_usdt,"ONE");
?>

В итоге я получаю Warning: Undefined variable $db in /home/users/j/j82769333/domains/site.ru/main.php on line 9

Не пойму почему ошибка. Если вне функции выполнять запрос в БД - то всё нормально.

connect.php выглядит так:
<?php
$driver = "mysql";
$host = "localhost";
$db_name = "j82769333";
$db_user = "j82769333";
$db_pass = "passwd";
$charset = "utf8";
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

$db = mysqli_connect($host, $db_name, $db_pass, $db_name);
?>


Подскажите пожалуйста, почему выскакивает ошибка о том, что нет переменной $db когда пытаюсь выполнить запрос в БД в теле функции ?
  • Вопрос задан
  • 452 просмотра
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Самый простой и правильный вариант

function CheckDestiny ($variable, $type, $db) {
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Учитывая, что ваш код и так не ахти, можете сделать так

connect.php

$db = mysqli_connect($host, $db_name, $db_pass, $db_name);

if (!function_exists('db')) {
  function db () { global $db; return $db; }
}


или так

if (!function_exists('db')) {
  function db () {
    static $db;
    if (!$db) $db = mysqli_connect($host, $db_name, $db_pass, $db_name);
    return $db;
  }
}


И потом использовать функцию, она всегда будет доступна.

$add_destiny = mysqli_query(db(), "UPDATE `data` SET `column` = '$variable; WHERE `symbol` = '$db_symbol[$t]'");


Еще вариант - пробросить переменную в функцию

function CheckDestiny ($variable,$type) use ($db) {
 // ...
}


PS. Знатоков прошу не умничать по поводу предложенных вариантов.
Главное, что они заработают у автора =))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы