mysqli_error()连接信息

时间:2019-10-29 04:00:33

标签: php mysqli

我正在将PHP代码从mysql_转换为mysqli_。我的数据库连接位于常规代码的父文件夹中的单独文件“ conn.inc”中。其中的代码是::

function GetDBConn($host="localhost", $user="mydb", $pass="mypass", $db="mydb")   {

    return $dbconn = @mysqli_connect($host, $user, $pass, $db);
    mysqli_close($dbconn);

} 

在我的代码文件中, include_once ("../conn.inc");

我有类似-

的代码
$AuditInsertQ = mysqli_query(GetDBConn(),"INSERT INTO audit (userid, notes) VALUES (\"".$userid."\",  \"".$notes."\")") or die("Error inserting row to Audit: ".mysqli_error($dbconn));

运行代码时,我收到一条消息::

PHP Notice:  Undefined variable: dbconn in C:\...

我所看到的所有示例都将数据库连接与其引用的代码放在同一个文件中。当数据库连接位于另一个文件中时,如何引用它?我以为“ include_once”就是这样……?

2 个答案:

答案 0 :(得分:2)

这段代码有很多错误,我什至都不知道从哪里开始。

  • 完全不需要mysqli_error()
  • 不需要像GetDBConn()这样的功能
  • mysqli_close()在连接后没有意义。多亏了return运算符,它却从未被调用
  • die()是有害的
  • @运算符有害
  • conn.inc的文件扩展名是有害的
  • 将变量添加到查询中的方式最有害于它们

我知道很难找到一个好的教程。互联网充满了糟糕的过时信息。我写的教程不错,但是Google并不知道它们很好,也不会向您展示。好吧,至少我可以在这里给我答复。

关于现代mysqli您必须了解的三件事

  • mysqli可以自动报告其错误,不需要mysqli_error()
  • 连接只能建立一次,这意味着像这样的功能没有用
  • 没有变量应直接添加到查询中。为此,您必须使用带占位符的准备好的语句。

为了修正您的代码,

  • 请阅读此post。它没有解释为什么您应该使用准备好的语句,但请相信我的话
  • 然后阅读关于how to connect with mysqi properly的教程
  • 将您的文件重命名为conn.php,否则任何人都可以看到您的数据库凭据

然后将代码重写为

include_once ("../conn.php");
$stmt = $mysqli->prepare("INSERT INTO audit (userid, notes) VALUES (?,?)");
$stmt->bind_param("ss", $userid,$notes);
$stmt->execute();

有关此代码中发生的情况的说明,请参阅我在how to run an INSERT query with mysqli上的教程

答案 1 :(得分:0)

在您的函数GetDBConn中,它返回mysql资源,而不是为您定义$dbconn变量。

使用类似mysqli_query($dbconn = GetDBConn(),"INSERT INTO audit ....


注意

function GetDBConn($host="localhost", $user="mydb", $pass="mypass", $db="mydb")   {

    return $dbconn = @mysqli_connect($host, $user, $pass, $db);
    mysqli_close($dbconn);

} 

$dbconn仅在函数中可用,无法在函数外部访问,因此在此处进行定义是没有用的。
mysqli_close($dbconn);将永远不会到达。