搜索数据库以更新结果

时间:2017-04-20 12:01:17

标签: php mysql

我正在接受用户输入并将其存储在数据库中,但是如果用户添加更多信息,我希望能够更新记录。所以我想搜索数据库找到具有相同名称的服务器,并更新上次停机时间和停机次数。

$connect = mysqli_connect("localhost", "Username", "Password","Test_downtime");

    if (!$connect) 
    {
        die("Connection failed: " . mysqli_connect_error());
    }else
    {
        echo "Connected successfully\n";
    }

$servername = $_GET["server_name"];
$downtime = $_GET["downtime"];

$time_now = time();
$result = mysqli_query($connect, "SELECT COUNT(*) FROM `Test_downtime`.`Downtime` WHERE `Server_Name` = '$servername'");
$row = mysqli_fetch_array($result);

            // If no downtime have been reported before
            if ($row[0] == 0){
                $sql = mysqli_query($connect, "INSERT INTO `Test_downtime`.`Downtime` (ID, Server_name, First_downtime, Last_downtime, Num_of_downtime,Total_downtime) VALUES (NULL, '$servername', '$time_now','$time_now',1,'$downtime'); ");
                if ($sql==true) {
                    echo $servername . " has has its first downtime recorded\n";
                } 
            }



            //If users is already in the database
            else{
                $numdowntime = ($row["Num_of_downtime"] + 1);
                $id = ($row["ID"]);
                $sqlupdate = "UPDATE `Test_downtime`.`Downtime` SET `Num_of_downtime` = $numdowntime, `Last_downtime` = now() WHERE `Server_Name` = '$servername'";

                 if ($sqlupdate == TRUE) {
                    echo "Oh No! " . $servername . " has had ". $numdowntime ." of downtimes" ;
                }   
            }
?>

如果服务器不在数据库中,程序可以正常工作,如果服务器已经在数据库中,则会出现问题。我收到消息说它已更新但数据库没有任何反应。我如何制作它以便搜索和更新搜索项目的记录。

4 个答案:

答案 0 :(得分:0)

您将结果作为索引数组

获取
mysqli_fetch_array($result);

在这里您将访问结果作为关联数组

$numdowntime = ($row["Num_of_downtime"] + 1);

将您的查询更改为

mysqli_fetch_assoc($result);

使用

mysqli_num_rows($result);

检查您是否有任何数据

更改

if ($row[0] == 0){}

if(mysqli_num_rows($result) ==0){}

答案 1 :(得分:0)

因此,执行sql语句^^

,所以没有任何附加内容

看看这里:

class B5{}; // new class B5 nobody inherits from
BaseGenerator<B1, B5> bad_baseGen;
deriveGen.generateDerive(&bad_baseGen);

您需要使用:

$sqlupdate = "UPDATE `Test_downtime`.`Downtime` SET `Num_of_downtime` = $numdowntime, `Last_downtime` = now() WHERE `Server_Name` = '$servername'";

就在它之后才能执行它。

或者至少将其更改为

$sql = mysqli_query($connect, $sqlupdate);

顺便问一下还有其他问题,但这里有一个问题[查看另一个答案以便找到另一个]

答案 2 :(得分:-1)

您错过了mysqli_query()函数,它实际上是在查询数据库。

$sqlupdate = mysqli_query("
    UPDATE `Test_downtime`.`Downtime`
    SET `Num_of_downtime` = $numdowntime, `Last_downtime` = now()
    WHERE `Server_Name` = '$servername'"
);

答案 3 :(得分:-1)

增加列计数的一个好方法是使用SQL来增加它。

$sqlupdate = mysqli_query($connect, "UPDATE `Test_downtime`.`Downtime` SET `Num_of_downtime` = (`Num_of_downtime` + 1), `Last_downtime` = now() WHERE `Server_Name` = '$servername'" );

这样您可以跳过$ numdowntime计算,结果更准确。

在您当前的设置中,两个用户可以同时触发事件,它们都从数据库中检索相同的数字(即9),两者都增加一个(即10),并写入相同的数字在数据库中。 使你的计数与实际数量相差不了。

SQL通过锁定行来为您解决这个问题,并且使用更少的逻辑为您提供更准确的结果:)