10

我使用 PHP 连接到数据库没有问题,但是在我测试过的一些脚本中,我发现连接命令有一点不同。

@mysql_connect和 和有什么不一样mysql_connect

我在编写自己的脚本时从未使用过这个@符号,所以只是想知道它是否有目的。

提前致谢

4

5 回答 5

16

@函数前面的符号使其静音。这意味着,即使执行失败,您也不会收到任何类型的错误消息。所以我建议:不要使用它

另外正如@AlexanderLarikov 所说,不要再使用mysql_*了,社区已经开始贬低该功能。

于 2012-07-31T14:51:09.083 回答
2

它是/错误控制运算符。它只是让您抑制错误。

我建议您在代码中省略它。

从文档:

目前,“@”错误控制运算符前缀甚至会禁用将终止脚本执行的严重错误的错误报告。除此之外,这意味着如果您使用“@”来抑制某个函数的错误,并且该函数不可用或输入错误,则脚本将在那里死掉,而不会说明原因。

于 2012-07-31T14:51:54.973 回答
1

那是一种错误抑制机制。因此,假设您尝试连接时出现错误,PHP 会默默地忽略它,而不是显示/记录它(取决于您的设置)。

我个人认为使用它是不好的做法,因为在我看来,您应该编写代码来处理错误,而不仅仅是默默地丢弃它们。

于 2012-07-31T14:52:05.720 回答
0

@ supresses 警告http://php.net/manual/en/language.operators.errorcontrol.php明智地使用它

于 2012-07-31T14:52:46.547 回答
0

如果不使用任何类似的选项;

if ("我只是在我的 srv 上做测试") {
   错误报告(E_ALL);
} 别的 {
   错误报告(0);
}

那么,可以针对这种情况推荐;

$conn = @mysql_connect(...);
如果($conn === 假){
   // 处理错误
}

或者;

@mysql_connect(...) or die("Could not connect to ...");

因此,@如果错误存在于“使用可抑制功能的位置”行,则抑制错误。

// 可抑制?是的,因为如果这些是结构函数,则不能应用于@...die, exit, eval函数。

于 2012-08-06T13:28:53.183 回答