首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想不出下面两种语法之间的区别

我想不出下面两种语法之间的区别
EN

Stack Overflow用户
提问于 2011-08-25 16:21:09
回答 12查看 149关注 0票数 0
代码语言:javascript
运行
复制
while($rowForStateList  =   @mysql_fetch_array($resForStateList))

{
    $sid[$i]    =   $rowForStateList['state_auto_id'];

    $sname[$i]  =   $rowForStateList['state_name'];

    $spid[$i]   =   $rowForStateList['country_auto_id'];

    $i++;
}

代码语言:javascript
运行
复制
while($rowForStateList  =   mysql_fetch_array($resForStateList))

{
    $sid[$i]    =   $rowForStateList['state_auto_id'];

    $sname[$i]  =   $rowForStateList['state_name'];

    $spid[$i]   =   $rowForStateList['country_auto_id'];

    $i++;
}
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-08-25 16:25:20

不同之处在于,第一个代码示例中的@mysql_fetch_array获取数组,抑制任何错误,而mysql_fetch_array执行相同的操作,但不抑制错误。实际上,第二种方法更正确。

使用@的坏处在于它会使调试变得复杂。有了这种抑制,在发生错误的情况下,您将以空数组结束,因此它看起来就像用于获取$resForStateList的查询返回了空结果。但是,您实际上可能已经破坏了查询,拒绝了数据库连接以及其他任何东西。使用@ ,你永远不会知道出了什么问题,。

所以,不要使用@。相反,请使用error handling functions。最好的方法是检查某些东西是否可能导致错误,例如,如果出现任何错误,mysql_query将返回false,因此您可能希望像这样检查它

代码语言:javascript
运行
复制
$result = nysql_query("qwerty");
if (!$result){
    echo mysql_error();
}
票数 2
EN

Stack Overflow用户

发布于 2011-08-25 16:24:00

不同之处在于,前者将屏蔽mysql_fetch_array()中发生的任何错误,从而使调试更加困难。

票数 1
EN

Stack Overflow用户

发布于 2011-08-25 16:26:08

第一个版本中的@基本上意味着“如果这个函数触发错误,只需隐藏它,不记录或显示它”。

永远不要使用@ error抑制运算符!这不仅会造成调试的噩梦,还会损害应用程序的性能。使用error_reporting、log_errors和display_errors来设置正确的错误消息行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7187130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档