基本上,我试图用伪代码做的是:
if button_1_press {
if connection_doesnt_exist{
create_connection
echo "connected"
}
else {
echo "still connected"
}
}
if button_2_press{
if connection_exist{
close_connection
echo "disconnected"
}
else {
echo "still disconnected"
}
}
我尝试了一些方法,目前为止最好的方法是:
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type='text/javascript' src='script.js'></script>
<title>PHP AJAX Example</title>
</head>
<body>
<input type='submit' onclick='makeRequest();' value='Connect' id='b1'/>
<input type='submit' onclick='makeRequest();' value='Disconnect' id='b2'/>
<div id='ResponseDiv'>
This is a div to hold the response.
</div>
</body>
</html>
Javascript:
var xmlHttp = createXMLHttpRequest();
function createXMLHttpRequest(){
var xmlHttp;
if (window.ActiveXObject){
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e) {
xmlHttp = false;
}
}
else {
try {
xmlHttp = new XMLHttpRequest();
}
catch(e) {
xmlHttp = false;
}
}
if(!xmlHttp){
alert("Error creating the XMLHttpRequest object.");
}
else{
return xmlHttp;
}
}
function makeRequest(){
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState == 4){
HandleResponse();
}
}
document.getElementById("b1").onclick = function () {xmlHttp.open("GET", "mysql.php?button=1", true); xmlHttp.send(null);}
document.getElementById("b2").onclick = function () {xmlHttp.open("GET", "mysql.php?button=2", true); xmlHttp.send(null);}
}
function HandleResponse(){
response = xmlHttp.responseText;
document.getElementById('ResponseDiv').innerHTML = response;
}
PHP
<?php
$servername = 'localhost';
$username = 'root';
$password = '';
$conn = new mysqli($servername, $username, $password);
if ($_GET['button']==1){
if ($conn){
echo "already connected";
}
else {
$conn = new mysqli($servername, $username, $password);
echo " connected";
}
}
if ($_GET['button']==2){
if ($conn){
echo "disconnected";
$conn->close();
}
else {
echo "still disconnected";
}
}
?>
我的问题是:
1) 当第一次点击任何按钮时,它什么都不做;仅从第二次点击开始工作。
2) 按钮“已连接”始终显示“已连接”。
3) 按钮“Disconnect”总是显示“disconnected”
我的理解是发生这种情况是因为每次按下按钮时,makeRequest 函数都会进行 AJAX 调用,每次都会创建一个 mysqli 连接,因此在评估其是否打开时,它始终为真,但是我不知道如何修复它。
最佳答案
这完全没有意义。
默认情况下,当脚本退出时,PHP 会关闭/清除所有打开的连接。因此,每次您执行 AJAX 请求来测试数据库连接时,无论如何都会打开一个新数据库连接,而不会测试以前的连接。
您可以使用持久数据库连接,但即使这样也不能保证您会获得与上次相同的连接。您会从打开的连接池中获得一些随机的连接,而对它进行测试毫无意义。
使用持久连接也会带来一大堆问题。坚持不懈的微观好处与其将导致的所有问题相比显得微不足道。
关于javascript - 检查MySQL是否仍然连接或断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786541/