我没有问题使用PHP连接数据库,但在一些测试脚本中,我发现连接命令有一点小差别。
@mysql_connect
和 mysql_connect
之间的区别是什么?
我自己编写脚本时从未使用过 @
符号,所以想知道它是否有作用。
提前感谢!
我没有问题使用PHP连接数据库,但在一些测试脚本中,我发现连接命令有一点小差别。
@mysql_connect
和 mysql_connect
之间的区别是什么?
我自己编写脚本时从未使用过 @
符号,所以想知道它是否有作用。
提前感谢!
@
符号放在函数前面会使其静音,意思是即使执行失败也不会得到任何类型的错误消息。因此,我建议不要使用它。
此外,正如@AlexanderLarikov所说,不再使用mysql_*
,社区已经开始弃用该功能。
mysql_*
函数,因为它已被弃用。 - Alexander Larikov@
来抑制一些警告并逐步清理你的代码,而不是同时处理所有错误。在这种情况下,mysql_*
会发出弃用警告,抑制它们直到你解决其他问题,然后再切换回来查看是否已经摆脱了所有问题(用PDO替换它们)。 - Elias Van Ootegem这是一个错误控制运算符。它简单地允许您抑制错误。
我建议您在代码中省略它。
来自文档:
当前,“@”错误控制操作符前缀甚至会禁用临界错误的错误报告,这将终止脚本执行。这意味着,如果您使用“@”来抑制某个函数的错误,并且要么该函数不可用,要么已经被误键入,则脚本将在那里停止,而没有任何指示。
这是一种错误抑制机制。比如说,当您尝试连接时出现错误,PHP会默默地忽略它,而不是显示/记录它(取决于您的设置)。
我个人认为使用这种机制是不好的做法,因为在我看来,您应该编写代码来处理错误,而不仅仅是默默地丢弃它们。
如果不使用任何选项,代码会像下面这样:
if ("我只是在测试我的服务器") { error_reporting(E_ALL); } else { error_reporting(0); }
然后,建议采用以下代码:
$conn = @mysql_connect(...); if ($conn === false) { // 处理错误 }
或者:
@mysql_connect(...) or die("无法连接到...");
因此,@
会抑制存在于“可抑制函数所在的行”的错误。
// 可抑制?是的,因为如果这些函数是结构性函数,就不能将@
应用于die, exit, eval
等函数。
@
是 PHP 中等同于 VB 的on error resume next
的语法,例如:“谁在乎宇宙刚刚爆炸了,所有人都死了。让我们假装一切正常,继续对自己的脚开枪。” - Marc Bmysql_*
函数。它们已不再受维护,社区已经开始弃用过程。看到红框了吗?相反,您应该学习关于预处理语句,并使用 PDO 或 MySQLi。如果您不能决定,这篇文章将帮助您选择。如果您想学习,请参阅这个好的PDO教程。 - Manse