【问题标题】:Check if MySQL is still connected or disconnected检查 MySQL 是否仍然连接或断开连接
【发布时间】:2015-08-27 11:42:47
【问题描述】:

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

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) 按钮“断开连接”总是显示“断开连接”

我理解这是因为每次按下按钮时,makeRequest 函数都会进行一次 AJAX 调用,每次都会创建一个 mysqli 连接,所以在评估它是否打开时,它总是为 true,但是我不知道如何解决它。

【问题讨论】:

  • 只是指出,你正在使用“new mysqli”测试它是否存在......然后如果它不存在则再次使用“new mysqli”(这永远不会发生)......冗余和正如马克 B 所说,毫无意义......

标签: javascript php html mysql mysqli


【解决方案1】:

这完全没有意义。

默认情况下,当脚本退出时,PHP 会关闭/清理所有打开的连接。因此,每次您发出 AJAX 请求来测试数据库连接时,您都会打开一个 NEW 数据库连接,而永远不会测试以前的连接。

您可以使用持久的数据库连接,但即使这样,也不能保证您会获得与上次相同的连接。你会从一个开放的连接池中获得一些随机连接,这对测试毫无意义。

使用持久连接也会带来大量问题。坚持不懈所带来的微观利益与其会导致的所有问题相比都显得相形见绌。

【讨论】:

  • 总有办法让某人发疯。
  • 如果问题是关于 "如何进行连接/断开连接..." 方法,那么这将更有意义。有些人喜欢玩小工具,看看当你按下它们时按钮可以做什么。 “这是做什么的?”。 - 噗。
  • 我明白你的意思。对不起,我的无知,我完全是使用 MySQL 和 PHP 的新手,我试着学习一些概念。所以,如果你不介意解释一下,我应该如何创建单个连接,进行一些 ajax 调用来做一些事情,并确保当我再次进行 ajax 调用时,相同的数据库连接仍然存在?或者正确的方法是当我进行 AJAX 调用时,打开一个新连接,做一些事情(如果需要,返回其他事情),然后关闭连接?感谢您的时间:P
  • 这几乎就是所有 php 脚本的工作方式。尤其是 mysql。在脚本开始时连接到数据库,做很多事情,然后在脚本退出时允许关闭连接。 mysql 的连接协议非常轻量级,与其他一些数据库相比,开销并不大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2016-05-21
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多