2012-02-18 50 views
1

如果没有$ sql_result的结果,则会抛出错误... 如果没有行,请执行此操作以防止出现错误,正确的方法是什么?不能是你必须先计算行数?

mysql_result($sql_result, 0); 

亲切问候任何反应..Ĵ

+1

最简单的方法来停止'mysql_result'抛出一个错误是*停止使用它*。这是古老的,勉强维持了。 – cHao 2012-02-18 22:44:17

回答

0
if (is_resource($sql_result)) { 
    $value = mysql_result($sql_result, 0); 
} 
0

您必须测试$sql_result第一。

0
if ($sql_result !== false    # query was successful 
&& mysql_num_rows($sql_result) > 0) # query returned rows 
{ 
    // do your thing 
} 
0

这是方法,我喜欢:

$sql = "SELECT * ...."; 
$r = mysql_query($sql); 
if (!$r) throw new Exception('Error: ' . mysql_error() . '; Attempted: ' . $sql); 
if (mysql_num_rows($r) > 0) { 
    //Process Result 
} else { 
    //Deal with an empty Result Set 
} 

我抛出一个异常,因为在我至少应用,一个失败的SQL查询是一个大忌MySQL查询失败:继续正常的脚本执行不会完成任何有用的工作〜[SQL语法或数据库连接问题存在错误]。异常冒出来,直到应用程序有适当的地方来捕捉这样的问题。

我使用特定于应用程序的例外:ExceptionMySQL,以便我可以在应用程序中更高级地捕获它:例如

//Top Level Application 
try { 
    //Execute appropriate application call 
} catch (ExceptionMySQL $e) { 
    //Deal with a mysql exception 
} catch (ExceptionPermission $e) { 
    //Deal with a permission Exception 
} catch (//etc. etc. etc. 
+0

不是一个坏主意,尽管你一定会选择一个比'Exception'更具体的类型来抛出...... :)如果你还没有使用异常,请注意这将导致你的脚本死亡,如果查询不成功。通常在这种情况下这是正确的,但仍然需要注意。 – cHao 2012-02-19 01:52:02

+0

@cHao是的,我打算使用我实际使用的异常,但是我担心它让我的回答不太清楚=) – Shad 2012-02-19 02:23:33

+0

这种方法似乎为单个查询添加了更多的工作和逻辑,清洁。如果查询不好,PHP会抛出错误,但如果没有行,则不会抛出错误。如果查询是好的,结果集是空的,并且你正好行事,就好像有一行一样,但是PHP的标准过程1)检查是否(is_resource($ result))然后2) ($ row = mysql_query($ result))允许你容纳空的结果集,而不需要繁琐的异常,而且在/ then/else中很简单。为什么复杂的事情? – hexparrot 2012-02-19 02:37:20