打开和关闭mysqli查询的正确方法

时间:2014-01-27 19:26:06

标签: php sql mysqli

我有这个简单但令人困惑的问题,特别适合那些像我一样自学成才的人...... 我已经在PHP.NET和MYSQL.COM中阅读了不同的文档,它们都解释了如何打开以及如何关闭它,但对于这个问题并没有真正帮助,至少对我而言。

我学到这一点的方式如下 我需要一个文件到我的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();
}

所以我的数据库有我的连接,现在让我们取一些西瓜

<?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进行查询,则关闭它...
否则如果a = 5做另一个查询然后关闭它,我认为这很简单,但如果我的一个查询转发来自另一个查询的信息怎么办...

如果a = 1进行查询
做一些东西和更多的东西和大量的IF然后
如果第二个查询的结果是B做另一个查询......依此类推......

也许我只是过度思考它,然后还有另一种方法来打开或关闭MySQLi

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

如果您有3个查询,con_one,con_two,con_three,那么您必须逐个关闭,例如con_one-&gt; close(),con_two-&gt; close(),con_three-&gt; close()..等等......正确吗?

我问这个因为几个小时。以前我有一个错误告诉我,数据库的连接太多,因此无法处理信息...... 事实上,这是一个服务器错过配置,让我思考,如果这是一个真实的情况我该怎么办!??? 如果用户购买的东西,然后战俘! !连接太多,数据丢失......只是虽然这会产生一些噩梦

我不知道......我的大脑现在正在蒸汽......请一些人请!如果不是很多问我请向我解释一下这个例子......

非常感谢你!

概率pd。在本地主机上,最大连接数是10(IIS,WAMP,XAMP)...在共享主机上我觉得是25 ...

1 个答案:

答案 0 :(得分:1)

mysqli_close()关闭连接而非查询。如果您知道当前请求不再需要连接,则应该只关闭连接。如果您未在代码中明确关闭连接,则连接将在PHP执行结束时自动关闭。

通常不需要显式关闭连接,显然在某些特殊情况下您可能需要这样做,例如,如果您的脚本在使用连接之后执行了一些大的处理,那么在此期间释放连接将是有益的处理。