由于我的问题可能不清楚:
简而言之,我希望让以下代码更短和/或更快
我有登录系统启动会话并运行直到你退出
我还有一个SELECT WHERE脚本,可以计算尚未支付多少发票,但工作得很好,但很长,很丑,而且很笨重:
<?php
$con=mysqli_connect("REMOVED FOR SECURITY");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT COUNT(*) FROM mypanda_invoices
WHERE is_paid='0'");
while($row = mysqli_fetch_array($result))
{
echo "<span class='badge badge-important'>" . $row['COUNT(*)'] . "</span>";
}
?>
现在要获取我拥有的用户名:<?php session_start(); echo $_SESSION['username']; ?>
在某种程度上,我可以使用上面的代码执行相同类型的操作吗?只是为了缩短它并利用会话???提前谢谢。
答案 0 :(得分:2)
只要会话已开始,您也可以将发票计数放入会话中。
如果您希望代码更清晰,我建议您检查结果集,然后使用fetch_object()->inv_count
(或者,在PHP 5.4中,您可以使用fetch_array(MYSQLI_NUM)[0]
。)
如果你的系统的一个重要部分 - 例如数据库连接有错误,你应该优雅地处理它(下面的die
不优雅,但它完成了工作)而不是只是回显并继续,这将在以后导致致命的错误。
此外,使用对象也会使事情变得更清晰。
<?php
$con = new mysqli("REMOVED FOR SECURITY");
// Check connection
if(mysqli_connect_errno()) die("Failed to connect to MySQL: " . mysqli_connect_error());
$result = $con->query("SELECT COUNT(*) AS inv_count FROM mypanda_invoices
WHERE is_paid='0'");
if($result && $result->num_rows) $_SESSION['inv_count'] = $con->fetch_object()->inv_count;
else $_SESSION['inv_count'] = 0;
echo "<span class='badge badge-important'>" . $_SESSION['inv_count'] . "</span>";