PHP正在更新不存在的数据库索引

时间:2013-02-07 23:11:47

标签: php mysql sql database

在我的主页上,当有人登录时,我使用AJAX使用AJAX与PHP文件“对话”,并且在他们注销时也是如此。但是,当他们退出时,应该用他们离开的时间更新数据库索引。如果他们的姓氏的数据库条目不存在(意思是,他们没有登录),则应该返回错误。相反,PHP文件说它正在更新不存在的数据库索引。我正在使用IF语句来实现这一目标。由于某种原因,它认为指数确实存在。我已经检查了它正在写入的数据库,并且它应该更新的索引不存在。

这是我的代码:

if ($Type == 1)
{
$mysqli = new mysqli("localhost","----","----", "----");
if (!$mysqli)
    $Type = 3;


$Select = $mysqli->query("SELECT Time_Out FROM " . $Date . " WHERE Last_Name = '" . $LName . "'");
$Row = $Select->fetch_assoc();
$Row2 = $Row['Time_Out'];
if ($Row2 !== "-1") $Type = 4;


if ($Type == 1)
    {if ($mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'"))
        {}
     else
        {$Type = 5;}
    }

$Select = $mysqli->query("SELECT Time_In FROM " . $Date . " WHERE Last_Name='" . $LName . "'");
$Row = $Select->fetch_assoc();
$Row2 = $Row['Time_In'];
$Time2 = explode(":",$Row2);
$Hour2 =  $Hour - $Time2[0];

if ($mysqli->query("SELECT Hours FROM Names WHERE Last_Name='" . $LName . "'"))
    {$Select = $mysqli->query("SELECT Hours FROM Names WHERE Last_Name='" . $LName . "'");
     $Row = $Select->fetch_assoc();
     $Row3 = $Row['Hours'];
     $Auto += 1;}

$Time3 = 60-$Time2[1];
if ($Hour != 21) $Time4 = $Min;
$Time5 = $Time3+$Time4;
if ($Time2[0]+1 != $Hour)
    {$Time5 = $Time5+60;}
$Total = $Time5+intval($Row3);

if ($Type == 1)
{
if ($mysqli->query("UPDATE Names SET Hours = '" . $Total . "' WHERE Last_Name = '" . $LName . "'"))
    {$Auto += 1;}
else
    {$mysqli->query("INSERT INTO Names (Last_Name, First_Name, Hours) VALUES ('" . $LName . "', '" . $FName . "', '" . $Total . "')");}
}


$mysqli->close();
}

if ($Type == 1) echo "Thank you " . $FName . " " . $LName . " for signing out! See you next time!";
if ($Type == 2) echo "The entered Student ID# is invalid. Please try again!";
if ($Type == 3) echo "An unexpected error has occured. Please try again!";
if ($Type == 4) echo "You have already signed out today!" . $Auto;
if ($Type == 5) echo "You didn't sign in today.";

1 个答案:

答案 0 :(得分:0)

UPDATE sql语句将返回true,即使它没有找到任何匹配项(它仍然正确运行,它只更新0行)。

改变这个:

if ($Type == 1)
{if ($mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'"))
    {}
else
    {$Type = 5;}
}

对此:

if ($Type == 1) {
    if ($mysqli->query("SELECT * FROM " . $Date . " WHERE Last_Name='" . $LName . "'")->num_rows > 0)
        $mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'");
    else
        $Type = 5;
}

运行select查询以首先确定记录是否存在(如果结果的num_rows属性为> 0),并根据该更新记录或将返回值设置为5。