0

由于我的问题可能不清楚:

简而言之,我想让以下代码更短和/或更快

我有登录系统,它启动一个会话并运行直到你注销

我还有一个 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']; ?>有没有办法用我上面的代码做同样类型的事情?只是为了缩短时间并利用会议???先感谢您。

4

1 回答 1

2

只要会话开始,您也可以将发票计数放入会话中。

如果你想要代码更清晰,我建议检查结果集然后使用(或者,在 PHP 5.4 中,我猜fetch_object()->inv_count你可以使用)。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>";
于 2013-05-19T00:36:05.963 回答