javascript - 检查MySQL是否仍然连接或断开

标签 javascript php html mysql mysqli

基本上,我试图用伪代码做的是:

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/

相关文章:

javascript - 如何使用 npm 库提供异步集成测试?

javascript - 如何在php中的header中设置目录

javascript - CSS 选择器和 querySelector 函数之间的结果差异

php - smarty 模板 - 在 url 中传递 javascript 变量

javascript - 如何在查询中保存和加载带有cookie的div结构

javascript - 在 React JS 中渲染多个容器

javascript - jquery ajax将变量从一个函数获取到另一个php

php - mysql,通过ajax调用使用数组中的主键更新多行

javascript - 跨域访问 HikVision 摄像头快照 - 需要在经典的 asp/javascript 中以编程方式完成基本身份验证

javascript - getElementsByTagName ("table") - 以奇怪的方式获取 td