2017-10-22 96 views
0

据我所知,得到mysqli的错误信息的唯一途径是:有没有办法得到没有CONNECTION变量的mysqli_error?

$con=mysqli_connect("localhost","my_user","my_password","my_db"); 
///RUN QUERY HERE, and if error: 
$error=mysqli_error($con); 

但是(认为我很聪明),我的整个软件编程,该得到CON信息的功能,因为有多个数据库和桌子。所以我的查询看起来更像这样。

$query=mysqli_query(CON("USER_DATABASE"),"INSERT INTO users (column) VALUES ("VALUE") "); 
run_query($query); ///In this function I either run the query, 

或记录失败的查询。但是不能记录具体的错误。

有什么办法都以某种方式仍然捕捉mysqli_error();而mysqli_error()函数中没有$ con?也许与$查询变量?

+1

是的,另一个 - 正确的方法是对mysqli应用异常处理。阅读[this](https://phpdelusions.net/mysqli/error_reporting)和[this](https://phpdelusions.net/pdo#errors)。第二个链接介绍有关PDO的理论,但它实际上也适用于mysqli。 – 2017-10-22 04:49:37

+0

顺便说一句我不明白这个运行查询的事情。用mysqli_query,你已经**正在运行一个查询。再次“运行”它毫无意义。 –

回答

1

as there are multiple databases and tables.

表的数量并不重要。

仿佛数据库,应用程序应该有每个数据库(但是,我宁愿说,你正在做的事情错了,如果你需要多个数据库在一个简单的应用程序)一个连接变量。

无论哪种方式,有一种方式来获得mysqli的错误没有连接变量。为了让它成为可能,你应该告诉Mysqli开始抛出异常。只需添加这行

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

因此最简单的解决方案,你会做出CON()函数静态和每一个被调用的时候返回相同的连接实例。

但是,你应该重新考虑架构,使之更好地组织,只使用一个数据库,除非绝对必要,还可以使用OOP摆脱静态函数。

+0

感谢您的反馈。嗯好,所以这是在正确的方向。但是,现在我将错误输出显示为“致命错误:此处详细信息”,并且页面按预期方式死亡。有没有办法将这些错误的详细信息放入一个变量中,以便我可以保存它们?原因是因为即使有些查询可能会失败,我不想输出错误代码并杀死页面,因为它们不一定是“关键”的。基本上我的run_query($查询);函数如果(!$ query){发送警告给管理员},所以我们知道发生了什么。但是,因为$ con变量不存在,所以我们不能得到错误。 –

+0

那么,实际上你不需要一个变量。您需要的一切已经存在于PHP中,您只需根据您的需求进行配置即可。我写了一篇文章解释这些问题,[PHP错误报告基础知识](https://phpdelusions.net/articles/error_reporting),如果您对特定实现有任何疑问,我鼓励您阅读并返回。顺便说一下,建议网站/服务的流量是多少? –

+0

谢谢你的信息!我知道error_logs,但我希望我可以将所有error_logs转发到一个日志而不是每个目录中的新日志。我试图将mysqli_error放在varibale中的原因是我可以通过电子邮件发送给自己。将检查你的文章。谢谢!我是一名企业家,你可以告诉业余编码员。我已经为特许经营建立了一个成功的“公司门户”软件,并由我们拥有的与之集成的一些其他软件提供支持。所有这些服务器都保存在同一台服务器上,但大多数应用程序不同,这就是为什么有不同的数据库。 –

2

However (thinking I was smart) my whole software is programmed with a function that gets con info, as there are multiple databases and tables. So my queries look more like this.

不这样做。这不仅使得检索错误信息变得更加困难,而且 - 更重要的是! - 这意味着您的应用程序将为每个查询创建一个全新的数据库连接。这将使您的应用程序显着减慢

如果你的应用程序确实需要连接到多个数据库,考虑在数据库中传递一个符号名作为参数,并缓存连接且已在一个静态变量被使用的所有数据库。

相关问题