簡體   English   中英

mysqli_error() 連接信息

[英]mysqli_error() connection info

我正在將 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”是這樣的......?

這段代碼有很多錯誤,我什至不知道從哪里開始。

  • 根本不需要mysqli_error()
  • 不需要像GetDBConn()這樣的 function
  • 連接后mysqli_close()沒有意義。 由於返回運算符,它永遠不會被調用
  • die()是有害的
  • @運算符是有害的
  • conn.inc 的文件擴展名是有害的
  • 您向查詢中添加變量的方式是最有害的

我知道很難找到一個好的教程。 互聯網上充斥着蹩腳的過時信息。 我正在寫很好的教程,但谷歌不知道它們很好,也不給你看。 好吧,至少我可以在我的回答中給你。

現代mysqli你必須了解的三件事

  • mysqli 可以自動報告錯誤,不需要mysqli_error()
  • 一個連接只能建立一次,這意味着像這樣的 function 沒有用
  • 不應將變量直接添加到查詢中。 為此,您必須使用帶有占位符的准備好的語句。

為了修復您的代碼,

  • 請閱讀這篇文章 它沒有解釋為什么你應該使用准備好的陳述,但相信我的話
  • 然后閱讀我關於如何正確連接 mysqi的教程
  • 將您的文件重命名為 conn.php 或任何人都可以看到您的數據庫憑據

然后將您的代碼重寫為

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

有關此代碼中發生的情況的說明,請參閱我的教程,了解如何使用 mysqli 運行 INSERT 查詢

在您的 function 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只存在於 function 中,在 function 之外無法訪問,所以在這里定義是沒有用的。
mysqli_close($dbconn); 永遠不會到達。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM