所以我对PHP很陌生,而且我只是在努力解决这个问题,但我遇到了一个我无法克服的障碍。
我的目标是运行一些命令来清除和更新排名表,然后在表格中显示数据。我有桌子显示几乎没有问题但是当我添加代码来更新表时,页面在它甚至显示表之前停止,它只是一个空白页面,它甚至不会运行任何HTML。
这是PHP,如果需要,我可以提供其余的页面代码。
<?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);
?>
答案 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 ...";
编辑:正如评论中所提到的,这是调试的第一步。忘了直接说出来。