Ошибка переменные PHP в связи с Mysql

у меня есть этот код

global $conexion;
global $fecha;
  $fecha=strftime( "%Y-%m-%d %H:%M:%S", time() );

$conexion=null;
function conectar()
{global $conexion;
  $conexion = mysqli_connect("localhost", "admin", "admin", "admin");
 mysqli_set_charset($conexion,'utf8');
}
function desconectar(){
  global $conexion;
  mysqli_close($conexion);

и меня производит эта ошибка

 Severity: Warning --> mysqli_close() expects parameter 1 to be mysqli, null given 

Что могло бы быть плохое?

0
задан 21.03.2019, 16:25
1 ответ

Я даю благополучное прибытие Stackoverflow.

Я Думаю, что, пробовать помогать cГіdigo, что ты показываешь, состоит в том, чтобы осложнять жизнь в пользу нескольких мотивов:

  1. В PHP глобальные не функционируют, как один верит (они не являются глобальными) в чувство, свойственное слову (demostraciГіn в конце концов)
  2. , Хотя они функционировали, как глобальные, для этого случая и для почти всех случаев использование глобальных считается плохой одной prГЎctica. Представь, что в любой части cГіdigo меняется состояние глобальной переменной, он разъединяется, меняется база данных, и т.д. Представь в одной instrucciГіn INSERT или DELETE, которые берут другую дорожку или похожие вещи.
  3. не имеет смысл иметь один mГ©todo desconectar, когда mysqli располагает Вашим собственным mГ©todo desconexiГіn, или когда ты можешь распределять NULL в объект и с этим уже desconectarГ - в. Можешь писать

ты cГіdigo asГ-:

function conectar()
{
    mysqli_connect("localhost", "admin", "admin", "admin");
    mysqli_set_charset($conexion,'utf8');
    return $conexion;
}

Сейчас, ввиду того, что она funciГіn тебя возвращает одна conexiГіn, ты можешь делать это, когда ты будешь нуждаться в ней conexiГіn:

$mysqli=conectar();

Потом, ты используешь $mysqli, и когда ты не будешь нуждаться в ней, закрываешь ее с:

mysqli_close($mysqli);

, Или если ты предпочитаешь стиль, ориентируемый на объекты:

$mysqli->close();

Или, просто:

$mysqli=NULL;

Это совсем, - sГіlo два lГ-neas cГіdigo.

Как comprenderГЎs, хотеть закрыть ее conexiГіn посредством:

desconectar();

не другая вещь, которая должна пробовать изобрести колесо заново. Кроме того, что вынуждает тебя объявлять nueeeevo внутри нее funciГіn переменная global segГєn, что PHP понимает под глобальными .


DemostraciГіn выше сказанного в точке 1

В PHP, переменные, объявленные как global не функционируют, как один верит. Обычно понятно, что глобальная одна tendrГ - в силу во всем ГЎmbito рукописного шрифта или программы. В PHP не происходит это.

Давайте Видеть этот простой пример:

function conectar()
{
    $conexion = "conexion ok";
    return $conexion;

}

function desconectar(){
  //global $conexion;
  $conexion=null;
}

$conexion=conectar();
var_dump($conexion);
desconectar();
var_dump($conexion);

Вывод из-за экрана:

string(11) "conexion ok"
string(11) "conexion ok"

ВїPor quГ©, когда его называть desconectar() переменную не seteГі в NULL? Потому что это не глобальная переменная действительно. Для того, чтобы setee нужно объявлять NULL nueeeevo внутри desconectar():

function desconectar(){
  global $conexion;
  $conexion=null;
}

Сейчас sГ - мы будем иметь:

string(11) "conexion ok"
NULL

Действительно в PHP, истинные глобальные переменные используются $GLOBALS.

Давайте Видеть пример sГіlo подобно доказательству: Вышедшие

function conectar()
{
    $conexion = "conexion ok";
    return $conexion;
}

function desconectar(){
    $GLOBALS['trueGlobal']=null;
}

$trueGlobal= $GLOBALS['trueGlobal'] =conectar();
var_dump($trueGlobal);
desconectar();
var_dump($trueGlobal);

:

string(11) "conexion ok"
NULL

AquГ - sГ - $trueGlobal работает истинной глобальной переменной. Это тема, которую он вызывает много confusiГіn в PHP. В любом случае, desaconsejarГ - в использование глобальных переменных для этого.

1
ответ дан 02.12.2019, 05:18

Теги

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