我有这个简单但令人困惑的问题,特别适合那些像我一样自学成才的人......
我已经在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 ...
答案 0 :(得分:1)
mysqli_close()
关闭连接而非查询。如果您知道当前请求不再需要连接,则应该只关闭连接。如果您未在代码中明确关闭连接,则连接将在PHP执行结束时自动关闭。
通常不需要显式关闭连接,显然在某些特殊情况下您可能需要这样做,例如,如果您的脚本在使用连接之后执行了一些大的处理,那么在此期间释放连接将是有益的处理。