簡體   English   中英

PHP函數中的Mysqli連接

[英]Mysqli connection in function PHP

我面臨一個PHP問題。 我已經在網上搜索了,但找不到答案。 到目前為止,這是我的代碼:

<?php
   $db_host = 'db_host';
   $db_user = 'db_user';
   $db_password = 'db_password';
   $db_name = 'db_name';
   //not showing you the real db login ofcourse

   $conn = mysqli_connect($db_host, $db_user, $db_password, $db_name);
   if($conn) {
      echo 'We are connected!';
   }

到目前為止,一切進展順利。 連接已建立,並且“我們已連接!” 出現在屏幕上。

function login($username, $password, $conn) {
   $result = $conn->query("SELECT * FROM users");
   echo mysqli_errno($conn) . mysqli_error($conn);
} 

但是,當我運行此函數時,將彈出mysqli錯誤“未選擇數據庫”。 因此,我在函數之前和之后在文件中添加了以下代碼,因此總代碼變為:

<?php
   $db_host = 'db_host';
   $db_user = 'db_user';
   $db_password = 'db_password';
   $db_name = 'db_name';
   //not showing you the real db login ofcourse

   $conn = mysqli_connect($db_host, $db_user, $db_password, $db_name);
   if($conn) {
      echo 'We are connected!';
   }

   if (!mysqli_select_db($conn, $db_name)) {
      die("1st time failed");
   }

   function login($username, $password, $conn, $db_name) {
      if (!mysqli_select_db($conn, $db_name)) {
         die("2nd time failed");
      }
      $result = $conn->query("SELECT * FROM users");
      echo mysqli_errno($conn) . mysqli_error($conn);
   } 

   $username = 'test';
   $password = 'test';
   login($username, $password, $conn, $db_name);
?>

第一次添加數據庫名稱可以正常工作,但是,在該功能中它不起作用。 我也嘗試過在函數內部使用全局$ conn,但這也不起作用。 將mysqli_connect()更改為新的mysqli()也沒有任何效果。

提前致謝!

請注意,此代碼將根據您的代碼進行重構,並且不建議登錄邏輯。 請嘗試此代碼,然后進行您認為需要的更改。

確保您的數據庫信息也根據需要進行更新。

MyDB類

Class MyDB {

protected $_DB_HOST = 'localhost';
protected $_DB_USER = 'user';
protected $_DB_PASS = 'password';
protected $_DB_NAME = 'table_name';
protected $_conn;

public function __construct() {
    $this->_conn = mysqli_connect($this->_DB_HOST, $this->_DB_USER, $this->_DB_PASS);
    if($this->_conn) {
        echo 'We are connected!<br>';
    }
}

public function connect() {
    if(!mysqli_select_db($this->_conn, $this->_DB_NAME)) {
        die("1st time failed<br>");
    }

    return $this->_conn;
}

}

登錄類別

Class Login {

protected $_conn;

public function __construct() {
    $db = new MyDB();
    $this->_conn = $db->connect();
}

//This is a HORRIBLE way to check your login. Please change your logic here. I am just kind of re-using what you got
public function login($username, $password) {
    $result = $this->_conn->query("SELECT * FROM user WHERE username ='$username' AND password='$password'");

    if(!$result) {
        echo mysqli_errno($this->_conn) . mysqli_error($this->_conn);
        return false;
    }

    return $result->fetch_row() > 0;
}

}

用法

$login = new Login();
$logged = $login->login('username', 'password');

if ($logged) {
    echo "yeah!! you are IN";
} else {
    echo "boo!! . Wrong username and password";
}

暫無
暫無

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

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