MYSQL& PHP回显表时出现问题

时间:2014-10-17 21:01:40

标签: php mysql

所以我试图用一个COUNT命令来回显一个表中有多少行,但是我故意在表中没有行来测试if语句,它不起作用,但是最糟糕的是,它使网站的其余部分不起作用(弹出页面但没有显示文本或数字),当我向表中添加一行时,它工作正常,没有行=没有工作。这是一段不起作用的代码。任何和所有帮助都非常感谢。

    $query1 = mysql_query("
    SELECT *, COUNT(1) AS `numberofrows` FROM 
    `table1` WHERE `user`='$username' GROUP BY `firstname`,`lastname`
    ");
    $numberofrowsbase = 0;
    while($row = mysql_fetch_assoc($query1))
    {
        if(isset($row['numberofrows']))
        {
            $enteries1 = $enteries1;
        }else{
            $enteries1 =  $numberofrowsbase;
        }
        echo enteries1;
    }

2 个答案:

答案 0 :(得分:0)

也许违背我更好的判断,我会试着给你一个答案。这段代码有很多问题......

请勿使用mysql_

mysql_扩展名已弃用。您应该使用mysqli_或PDO。我将在这里使用mysqli_

SQL注入

您的代码对SQL注入非常开放,其他人可能会真正搞乱您的数据库。请阅读How can I prevent SQL injection in PHP?以获取更多信息。

守则

您不需要使用SQL函数对行进行计数,尤其是如果您想对查询所获得的数据执行其他操作(我认为您已经使用了这些数据)。重新计算所有列的数量。

在PHP中,您可以使用内置函数获取结果集中的行数。

所有这些事情在一起。你应该使用这样的东西;

// Connect to the database
$mysqli = new mysqli($host,$user,$pass,$database); // fill in your connection details
if ($mysqli->connect_errno) echo "Error - Failed to connect to database: " . $mysqli->connect_error;

if($query = $mysqli->prepare("SELECT * FROM `table1` WHERE `user`=?")) {
    $query->bind_param('s',$username);
    $query->execute();
    $result = $query->get_result();

    echo $result->num_rows;
}
else {
    echo "Could not prepare query: ". $mysqli->error;
}

结果中的行数现在保存到变量$result->num_rows,因此如果需要,可以使用echo this,就像我在上面的代码中一样。然后,您可以继续使用从数据库中获得的任何行。例如;

while($row = $result->fetch_assoc()) {
    $firstname = $row['firstname'];
    $lastname = $row['lastname'];
    echo "$firstname $lastname";
}

希望这有帮助。

答案 1 :(得分:0)

似乎你已经过了复杂的一切。来自worldofjr的一些好建议你应该采用板载,但最简单的方法是从表中获取总行数:

   SELECT COUNT(*) as numberofrows FROM table1;

这里还有其他几条不必要的线,逻辑是所有的疯狂。没有必要这样做

   $enteries1 = $enteries1;

这没有成就。

请改为:

    while($row = mysql_fetch_assoc($query1))
    {        
        if(isset($row['numberofrows']))
        {
        echo $row['numberofrows'];
        }
    }