2013-05-19 16 views
0

由于我的问题可能是不清楚的:使用会话代码,而不是PHP选取功能

总之,我想使下面的代码更短和/或更快

我已经登录系统,该系统将启动一个会话一直持续到你注销

我也有一个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

如果你的MySQL表不频繁更新,那么你可以使用查询缓存。这会让你的查询更快。 – Adrian

+0

我真的不明白'session'部分在哪里发挥作用 –

+0

我想使用'session'而不是那个长代码。实质上,我希望缩短代码。 – user2371301

回答

2

只要会话已开始,您也可以将发票计数放入会话中。我想推荐检查结果集,然后使用fetch_object()->inv_count(或者在PHP 5.4中,我可以使用fetch_array(MYSQLI_NUM)[0])。如果你想让代码更清洁,我会建议检查结果集,然后使用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>";