2011-03-31 99 views
0

我试图计算MySQL数据库中的行数并使用PHP报告该数字。我读过所有的文档,我认为这段代码应该可以工作,但无论我尝试什么,都会失败。计算MySQL行的数量

<?php 
session_start(); 
if (isset($_SESSION['username'])) { 
    $username = $_SESSION['username']; 
    $q = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
    $count = mysql_num_rows($q); 
?> 
<div class="user_info">Logged in as <?php echo $username; ?> | <a href="admin.php">Add a post</a> | <a href="experiment.php">View Posts</a> | <a href="inbox.php">Message Center <?php echo $count; ?> </a> | <a href="logout.php">Log Out</a></div> 
<?php } else {?> 

脚本成功报道$username$count不会返回一个数字。有任何想法吗?我是否在某处丢失了一个括号或分号?

+3

'recepiants' - 这是如何在你的表拼写的列? – 2011-03-31 17:41:46

+0

我希望我不是英语母语的时代喜欢这些。很高兴我的母亲没有看到那个 – Thomas 2011-03-31 17:59:21

回答

6

你错过了正在运行的实际查询的事情:

<?php 
session_start(); 
if (isset($_SESSION['username'])) { 
    $username = $_SESSION['username']; 
    $q = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
    $result = mysql_query($q); 
    $count = mysql_num_rows($result); 
?> 
<div class="user_info">Logged in as <?php echo $username; ?> | <a href="admin.php">Add a post</a> | <a href="experiment.php">View Posts</a> | <a href="inbox.php">Message Center <?php echo $count; ?> </a> | <a href="logout.php">Log Out</a></div> 
<?php } else {?> 

可能会更好b E要运行在查询中COUNT,如果这就是你需要:

<?php 
session_start(); 
if (isset($_SESSION['username'])) { 
    $username = $_SESSION['username']; 
    $q = "SELECT COUNT(*) AS Count FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
    $result = mysql_query($q); 
    $result = mysql_fetch_assoc($result) 
    $count = $result['Count']; 
?> 
<div class="user_info">Logged in as <?php echo $username; ?> | <a href="admin.php">Add a post</a> | <a href="experiment.php">View Posts</a> | <a href="inbox.php">Message Center <?php echo $count; ?> </a> | <a href="logout.php">Log Out</a></div> 
<?php } else {?> 

而且,正如其他人所指出的,你需要一个活动的数据库连接。

http://www.php.net/manual/en/function.mysql-fetch-assoc.php

8

mysql_num_rows需要查询资源 - 您正在提供一个字符串。您需要执行查询,然后才能期望了解其结果。

$sql = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
if(!$query = mysql_query($sql)) 
    trigger_error(mysql_error().' SQL: '.$sql); 
$count = mysql_num_rows($query); 

我怀疑上面的代码也会根据您在查询中的'收件人'错字发生错误。始终检查返回值mysql_query

编辑:正如jeroen指出,如果你粘贴的是该页面的整个代码,那么你忽略了打开数据库连接。请参阅mysql_connectmysql_select_db

+0

aww你让我了22秒。荣誉 – corroded 2011-03-31 17:42:24

+0

这只是一个片段,我连接。 – Thomas 2011-03-31 18:04:54

2

您正在评估$ Q为一个字符串,你错过了在$ Q A的mysql_query()

1

有几件事情,从运行的实际查询来检查开:

  1. 是真的列叫recepiants还是可能是recipients
  2. 你打开了一个数据库连接吗?
4

您还没有实际执行过您的查询。

$q = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
$result = mysql_query($q); 
if ($result) { 
    $count = mysql_num_rows($result); 
} 
2

您忘记了运行查询。

$res = mysql_query($q); 
$count = mysql_num_rows($res); 
3

这是错误的(需要有一个实际的查询):

$q = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
$count = mysql_num_rows($q); 

它应该是:

$q = "SELECT * FROM messages WHERE recepiants='$username' AND readcheck='T'"; 
$result = mysql_query($q, $connection); 
$count = mysql_num_rows($result); 
1

查询是:

SELECT count(*) FROM table 
-2

下面是简单的代码,我相信它会为许多工作在那里。当前的代码将检查数据库中是否存在已经存在的数据库,如果它已经存在则不会将记录添加到数据库,如果它永远不存在,则会将记录添加到数据库中。

<?php 
    $chkval =52364; 

    $con = mysql_connect("servername","username","password"); 

    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("databasename", $con); 

    $result = mysql_query("SELECT column_name FROM table_name where column_name = '$chkval'"); 

    if(mysql_num_rows($result)>0) 
     { 
      echo "There are records"; 

     } 
     else 
     { 
      mysql_query("INSERT INTO tablename (column_name) 
       VALUES ('$chkval')"); 

           echo "record added"; 

     } 
      mysql_close($con); 

?> 
+2

请不要在您的答案中包含宗教信息。谢谢。除此之外,选择列不是'COUNT()'是一个坏主意。 – ThiefMaster 2012-07-05 10:02:59