2009-07-24 109 views
11

我试了一下好像是最直观的方法检查mysql_query()是否返回任何结果的正确方法是什么?

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 

if ($result) 
{ ... 

,但没有工作,因为mysql_query返回即使返回0行的真正价值。 我基本上只想在返回一行时执行该条件下的逻辑。

+0

在代码中使用`$ _CLEAN`看起来非常可疑。看看这里为什么这是一个坏主意:http://stackoverflow.com/questions/6164522/will-this-code-actually-work-against-sql-injection – Johan 2011-05-28 21:59:34

回答

22

使用mysql_num_rows

if (mysql_num_rows($result)) { 
    //do stuff 
} 
+1

对于大型集合,这个函数比使用mysql_fetch_array效率低,但在这里它看起来很好。 – Smandoli 2009-07-24 22:47:05

7

如果你检查的具体哪一行:

if ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

您可以使用mysql_fetch_array()代替,或什么的,但原理是一样的。如果您正在等待1行或更多行:

while ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

这将循环直到耗尽行,此时它将继续。

2

怎么样这样:

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 
$result = mysql_fetch_array($result); 

//you could then define your variables like: 
$username = $result['username']; 
$password = $result['password']; 

if ($result) 
{ ... 

我喜欢它,因为我得到的是非常具体的从的mysql_query返回的结果。

-Ivan诺瓦克

1

好...

通过definiton的mysql_query:

的mysql_query()返回在 成功的资源,或者在错误FALSE。

,但你需要了解什么是如果这个函数返回的查询已经运行没有问题,而不是FALSE不同的值(正确的语法,连接还活着,等。),但是这并不意味着你的查询返回一些行。

例如

<?php 

$result = mysql_query("SELECT * FROM a WHERE 1 = 0"); 

print_r($result); // => true 

?> 

所以如果你假,你可以使用

mysql_errorno()mysql_error()知道发生了什么事..

本以下:

可以使用mysql_fetch_array ()从查询中逐行获取

6

mysql_num_rows

检索结果集中的行数。该命令仅对像SELECT或SHOW这样的返回实际结果集的语句有效。

如果没有匹配,那么零将是返回值并且有效FALSE

$result = mysql_query($query); 

if(mysql_num_rows($result)) 
{ //-- non-empty rows found fitting your SQL query 

    while($row = mysql_fetch_array($result)) 
    {//-- loop through the rows, 
    //-- each time resetting an array, $row, with the values 

    } 
} 

如果你只是退出数据库,这是一切都很好。如果更改或从数据库中删除行,想知道有多少人受到它的影响...

要检索受一个INSERT,UPDATE的行数,替换或删除查询,使用mysql_affected_rows()

$result = mysql_query($query); 

if(mysql_affected_rows()) 
{ //-- database has been changed 

} 

//-- if you want to know how many rows were affected: 
echo 'Rows affected by last SQL query: ' .mysql_affected_rows(); 

mysql_query()只会返回FALSE如果查询失败。即使您没有行但会成功查询数据库,它将返回TRUE

+0

有很好的解释! – jolt 2010-07-21 11:01:32

3

我用下面的:

如果(!$结果= 0 & & mysql_num_rows($结果)){

如果查询没有返回这将是一个布尔结果,它的价值将是0 。

所以你检查它是否是零或没有,如果没有,我们知道有什么东西在那里..

但是,有时它会返回1,即使是没有在那里,所以你然后检查是否有任何行,如果在那里有一整行,你肯定知道结果已经被返回。

5
$sql = "SELECT columns FROM table"; 
$results = mysql_query($sql, $conn); 
$nResults = mysql_num_rows($results); 
if ($nResults > 0) { 
    //Hurray 
} else { 
    //Nah 
} 

这应该有效。

+0

无法正常工作$结果变得错误 – 2015-04-07 11:02:15

0
$result = mysql_query(...); 

if(false !== $result) 
{ 
    //... 
} 
+0

[`mysql_query()`](http://php.net/manual/en/function.mysql-query.php)将仅在错误时返回FALSE。如果结果为空,则返回空资源。你的代码不会工作。 顺便说一下,它会一直在写`if($ result)` – 2012-04-27 09:26:15

相关问题