我希望从数据库中检索一个数值
function adminLevel()
{
$q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'";
return mysql_query($q, $this->connection);
}
这是SQL。
然后我写了下面的php / html: <?php
$q = $database->adminLevel();
if ($q > 7)
{
?>
<a href="newleague.php">Create a new league</a>
<?
}
?>
我遇到的问题是返回的userlevel不影响if语句。它始终显示。我怎样才能测试userlevel的值大于7?
由于
答案 0 :(得分:2)
mysql_query返回一个资源。您需要使用一些mysql_fetch_ *函数从该资源获取数据,例如mysql_fetch_row http://php.net/mysql_fetch_row
答案 1 :(得分:1)
adminlevel()
此处不返回整数。它返回一个包含单行和单列的mysql结果集对象;包含在内的数据点恰好是整数。据推测,然而,PHP将该对象与整数相比较,因为它大于7,但它并不是比较你想要比较的整数。试试这个:
function adminLevel()
{
$q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'";
$r = mysql_query($q, $this->connection);
if ( $r and mysql_num_rows($r) ) {
$s = mysql_fetch_assoc($r);
return $s['userlevel'];
} else {
// error handling; your query failed or returned no rows
}
}
答案 2 :(得分:1)
mysql_query
返回资源。然后,您需要从中获取结果。 e.g。
function adminLevel()
{
$q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'";
$result = mysql_query($q, $this->connection);
if ($row = mysql_fetch_assoc($result)) {
$level = $row['userlevel'];
} else {
$level = 0; // some default value
}
// free the result resource after using it
mysql_free_result($result);
return $level;
}
如果您考虑一下,在一般情况下,查询可以返回多个结果,因此您需要一种方法来依次检索每个结果(例如while
上的mysql_fetch_assoc
循环)但在此在您userlevel
id
选择if
的具体情况下,您将检索0或1行,以便我们可以使用{{1}}来检查匹配的行。
有关详细信息,请参阅documentation for mysql_query。
答案 3 :(得分:0)
您正在将mysql资源与整数进行比较,因此您可能会遇到奇怪的结果。使用mysql_result()从该资源中获取一个单元格。