我正在接受用户输入并将其存储在数据库中,但是如果用户添加更多信息,我希望能够更新记录。所以我想搜索数据库找到具有相同名称的服务器,并更新上次停机时间和停机次数。
$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" ;
}
}
?>
如果服务器不在数据库中,程序可以正常工作,如果服务器已经在数据库中,则会出现问题。我收到消息说它已更新但数据库没有任何反应。我如何制作它以便搜索和更新搜索项目的记录。
答案 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通过锁定行来为您解决这个问题,并且使用更少的逻辑为您提供更准确的结果:)