有没有办法在没有CONNECTION变量的情况下获取mysqli_error?

时间:2017-10-22 04:24:09

标签: mysql mysqli

据我所知,获取mysqli错误信息的唯一方法是:

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

然而(我以为我很聪明)我的整个软件都是用一个获取con info的函数编程的,因为有多个数据库和表。所以我的查询看起来更像这样。

$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?也许使用$ query变量?

2 个答案:

答案 0 :(得分:2)

  

然而(我以为我很聪明)我的整个软件都是用一个获取con info的函数编程的,因为有多个数据库和表。所以我的查询看起来更像是这样。

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

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

答案 1 :(得分:1)

  

因为有多个数据库和表。

表的数量无关紧要。

就像数据库一样,你的应用程序每个数据库应该有一个连接变量(但是,如果你需要在一个简单的应用程序中使用多个数据库,我宁愿说你做错了。)

无论哪种方式,有一种方法可以在没有连接变量的情况下获得Mysqli错误。为了使它成为可能,你应该告诉Mysqli开始抛出异常。只需添加此行

即可
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

因此,最简单的解决方案是使con()函数静态并在每次调用时返回相同的连接实例。

但是你应该重新考虑这个体系结构,并使用一个数据库使其更好地组织,除非它是绝对必要的,并且还使用OOP来摆脱静态函数。