页面挂起多命令mysqli php

时间:2014-10-19 02:44:21

标签: php mysql mysqli

所以我对PHP很陌生,而且我只是在努力解决这个问题,但我遇到了一个我无法克服的障碍。

我的目标是运行一些命令来清除和更新排名表,然后在表格中显示数据。我有桌子显示几乎没有问题但是当我添加代码来更新表时,页面在它甚至显示表之前停止,它只是一个空白页面,它甚至不会运行任何HTML。

这是PHP,如果需要,我可以提供其余的页面代码。

http://pastebin.com/GZ3KcNXK

<?php
    $con = mysqli_connect("localhost","uakronhv_admin","uakhvzdbadmin01","uakronhv_game1");
            if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }
    $sql = "DELETE FROM standings WHERE 1=1; ";
    $sql. = "INSERT INTO standings (`pId`,`pName`,`pStarve`) SELECT p.pId, concat(p.pFirst," ",p.pLast), TIMEDIFF(NOW(),s.lastTag) FROM players p left join starve s on p.pId = s.zId; ";
    $sql.= $mysqli_real_escape_string("UPDATE standings SET sStatus = "Human" WHERE sId NOT IN (SELECT DISTINCT taggedId FROM tags); "):
    $sql.= $mysqli_real_escape_string("UPDATE standings SET sStatus = "Zombie" WHERE (sId IN (SELECT DISTINCT taggedId FROM tags)) OR (sId IN (SELECT DISTINCT taggerId FROM tags)); "):    

    $que=$mysqli_query($sql);

    $sp = mysqli_query($con,"call updateStandings()");
    $result = mysqli_query($con,"SELECT * FROM standings");

    echo "<table>
    <tr>
    <th>Id</th>
    <th>Name</th>
    <th>Status</th>
    <th>Since Last Tag</th>
    </tr>";

    while($row = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td style=\"text-align:center\">" . $row['pId'] . "</td>";
        echo "<td>" . $row['pName'] . "</td>";
        echo "<td style=\"text-align:center\">" . $row['pStatus'] . "</td>";
        if ($row['pStarve'] > '72:00:00')
            echo "<td style=\"text-align:center\">Starved</td>";
        else if
            (is_null($row['pStarve']))
            echo "<td style=\"text-align:center\">--</td>";
        else
            echo "<td >" . $row['pStarve'] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:1)

我只是要指出故障的位置,这可能很好地修复你的代码。如果没有,那么您需要阅读更好的教程。

关于此代码块:

$sql. = "INSERT INTO standings (`pId`,`pName`,`pStarve`) SELECT p.pId, concat(p.pFirst," ",p.pLast), TIMEDIFF(NOW(),s.lastTag) FROM players p left join starve s on p.pId = s.zId; ";
$sql.= $mysqli_real_escape_string("UPDATE standings SET sStatus = "Human" WHERE sId NOT IN (SELECT DISTINCT taggedId FROM tags); "):
$sql.= $mysqli_real_escape_string("UPDATE standings SET sStatus = "Zombie" WHERE (sId IN (SELECT DISTINCT taggedId FROM tags)) OR (sId IN (SELECT DISTINCT taggerId FROM tags)); "):    

$que=$mysqli_query($sql);

连接不正确$sql. =这些应该读作$sql .=,这就是为什么你说DELETE部分有效但后面的其余部分无效。如果您使用or die(mysqli_error($con))mysqli_query(),则会发出错误信号。

然后你可能想要使用mysqli_real_escape_string()来清理输入,但这不是该功能的工作方式,并且你不在该功能前使用$符号。

它的工作原理如下:

$variable = mysqli_real_escape_string($con, $_POST['variable']);

阅读该功能:

然后你在$mysqli_query前面使用mysqli_query一个美元符号,它只是SET sStatus = "Human"

然后你正在做的SET sStatus = 'Human'应该是单引号而不是双引号or die(mysqli_error($con))并且对另一个做同样的事情。

使用error reporting并使用/ mysqli_query()添加Undefined variable...检查数据库错误会发出错误信号。

错误报告应该会针对$mysqli_query$mysqli_real_escape_string向您发出{{1}}警告。

这应该为您提供足够的信息来调试您的代码。

答案 1 :(得分:-1)

空白页通常表示语法错误。也许它是INSERT语句前的那个?

$sql. = "INSERT INTO standings ...";

试试这个;)

$sql .= "INSERT INTO standings ...";

编辑:正如评论中所提到的,这是调试的第一步。忘了直接说出来。