2014-01-27 2 views
1

У меня есть этот простой, но запутанный вопрос, специально для людей, которые являются самообучающимися программистами, такими как мои ...
Я читал разные документы в PHP.NET и MYSQL.COM, все они объясняют, как открыть и как закрыть его, но для этого вопроса, который действительно не помогает, по крайней мере для меня.
Правильный способ открыть и закрыть запросы mysqli

Путь, который я узнать это, как следовать
Я требую файла на мой conecction, такие как dbconnection.php или DB.php имя не матер, но содержание, так вот что я всегда делать ...

<?php 
// con.php 
$host = 'localhost'; 
$us = 'root'; // or whatever name for the user 
$ps = 'abcd'; // your password 
$db = 'abc'; // The name of your DB 

$con = mysqli_connect ($host, $us, $ps, $db); 

if (mysqli_connect_errno()) { 
    echo "DB server offline: ". $mysqli->connect_error; 
    exit(); 
} 

Так что мой Conection к моей БД, теперь позволяет получать некоторые арбузы

<?php 
include ('con.php'); 
// Lets get our varibales $_GET or $_POST 
// Lets clean our variables 
// Lets make sure that the data is what we expect, numbers and letters 
// because thats how I roll! 

$query_one = "SELECT * FROM table 1 WHERE id = 1"; 
$r_one = mysqli_query($con, $query_one); 
$rows = mysqli_fetch_assoc($r_one); 
// now lets echo the results, or print_r() or json()... 
mysqli_close($con); // this is pretty straight forward i think... 

Теперь вот моя путаница ...

 <?php 
     include ('con.php'); 
     // Lets get our varibales $_GET or $_POST 
     // Lets clean our variables 
     // Lets make sure that the data is what we expect, numbers and letters 
     // because thats how I roll! 

     $query_one = "SELECT * FROM table_1 WHERE id = '$ids'"; 
     $r_one = mysqli_query($con, $query_one); 
     $rows = mysqli_fetch_assoc($r_one); 
    // If I closed here the second query doesn't get executed... 
    if ($rows['publish'] == 1) { 
     $query_two = "SELECT * FROM table_2 WHERE id_user = '$ids' AND items = '$items'"; 
     // lets do some foreach or while 
    // If I closed here the first query still open... 
    } 
    // If I close here 
    mysqli_close($con); // Am I closing both queries? 
// Let get some more data 
// Should I close my third query 
mysqli_close($con); 
// hasn't this been close already? which mean that the third query never got 
the change to execute... correct? 

Так как вы можете видеть, в MYSQL.com он расскажет вам, как закрыть его, и PHP.net почти то же самое, но это не говорит вам, когда, чтобы закрыть его ..

если a = 1 сделать запрос, тогда закройте его ...
else if a = 5 сделать другой запрос, а затем закрыть его, это очень просто, я думаю, но что, если один из моих запросов ретранслирует информацию из другого запроса ...

если a = 1 сделать запрос
делать что-то еще и многое другое n из IF's тогда
, если результатом второго запроса был B сделать другой запрос ... и так далее ...

Возможно, я просто передумал это, тогда есть другой способ открыть или закрытая MySQLi

$con_one = conectTodb(); 
// queries 
$con_one ->close(); 

, если у вас есть 3 запросов, con_one, con_two, con_three, то вам придется закрыть один за другим, как con_one-> близко(), con_two-> близко(), con_three-> близко () ... и так далее ... правильно?

Я прошу об этом, потому что несколько часов. назад У меня была ошибка, сообщающая мне, что было слишком много соединений с базой данных, и для этого не удалось обработать информацию ... Это явка была ошибкой конфигурации сервера, , которая заставила меня думать, что Я собираюсь сделать, если это была реальная ситуация! ??? что делать, если пользователь что-то покупает, а потом POW !!! слишком много соединений, данные потеряны ... только что из этого даст некоторые ночные кошмары

Я не знаю ... мой мозг пропарился прямо сейчас ... может кто-то пожалуйста! объясните это мне, если не много спросить, пожалуйста, приведите несколько примеров ...

большое спасибо!

pd. на локальном хосте максимальное число соединений 10 (IIS, WAMP, XAMP) ... на хосте акцию я считаю 25 ...

+0

Соединения автоматически закрываются при завершении запроса; поэтому вам нужно подключиться в начале каждого запроса;). –

ответ

1

mysqli_close() закрывает соединение а не запроса.Вы должны только закрыть соединение, если знаете, что он не понадобится еще раз для текущего запроса. Соединение будет автоматически закрываться в конце выполнения PHP, если вы явно не закрываете его в своем коде.

Обычно нет необходимости явно закрывать соединение, и, очевидно, есть особые обстоятельства, в которых вы, возможно, захотите, например, если ваш сценарий выполняет огромную обработку после использования соединения, где было бы полезно освободить соединение во время обработки.

Смежные вопросы