@mysql_connect and mysql_connect

10

我没有问题使用PHP连接数据库,但在一些测试脚本中,我发现连接命令有一点小差别。

@mysql_connectmysql_connect 之间的区别是什么?

我自己编写脚本时从未使用过 @ 符号,所以想知道它是否有作用。

提前感谢!


16
@ 是 PHP 中等同于 VB 的 on error resume next 的语法,例如:“谁在乎宇宙刚刚爆炸了,所有人都死了。让我们假装一切正常,继续对自己的脚开枪。” - Marc B
如果你想抑制错误,你应该走面向对象的路线,并使用try-catch机制和函数的面向对象版本:D - sinni800
7
请勿在新代码中使用 mysql_* 函数。它们已不再受维护,社区已经开始弃用过程。看到红框了吗?相反,您应该学习关于预处理语句,并使用 PDOMySQLi。如果您不能决定,这篇文章将帮助您选择。如果您想学习,请参阅这个好的PDO教程 - Manse
如果您需要PHP符号参考,请尝试参考 - 这个符号在PHP中是什么意思? - Patrick
@ManseUK:感谢您提供的信息和参考资料。 - Lodder
5个回答

16

@符号放在函数前面会使其静音,意思是即使执行失败也不会得到任何类型的错误消息。因此,我建议不要使用它

此外,正如@AlexanderLarikov所说,不再使用mysql_* ,社区已经开始弃用该功能。


4
此外,我可以建议:完全不要使用mysql_*函数,因为它已被弃用。 - Alexander Larikov
同样正确,感谢您在此留下的评论。 - Peon
好的,“不要使用它”有点严厉。我会说:如果可能的话,尽量避免使用。比如你正在升级到php 5.4,并已将ini设置为严格的错误和警告报告,在这种情况下,你可以使用@来抑制一些警告并逐步清理你的代码,而不是同时处理所有错误。在这种情况下,mysql_*会发出弃用警告,抑制它们直到你解决其他问题,然后再切换回来查看是否已经摆脱了所有问题(用PDO替换它们)。 - Elias Van Ootegem
@AlexanderLarikov:啊,糟糕,要是我早知道这个就好了,现在得更新很多东西。谢谢你的信息 ;) - Lodder
@DainisAbols:感谢您的回答。我想知道为什么我的一些脚本无法正常工作,而且没有收到任何错误信息。 - Lodder

2

这是一个错误控制运算符。它简单地允许您抑制错误。

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

来自文档:

当前,“@”错误控制操作符前缀甚至会禁用临界错误的错误报告,这将终止脚本执行。这意味着,如果您使用“@”来抑制某个函数的错误,并且要么该函数不可用,要么已经被误键入,则脚本将在那里停止,而没有任何指示。


1

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

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


0

0

如果不使用任何选项,代码会像下面这样:

if ("我只是在测试我的服务器") {
   error_reporting(E_ALL);
} else {
   error_reporting(0);
}

然后,建议采用以下代码:

$conn = @mysql_connect(...);
if ($conn === false) {
   // 处理错误
}
或者:
@mysql_connect(...) or die("无法连接到...");

因此,@会抑制存在于“可抑制函数所在的行”的错误。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接