从 PHP 中的一个位置建立联系

Make Connections From One Location In PHP

在 JSP 中,如果我想连接到数据库,我将使用以下代码创建一个名为 DBManager 的 Java class:

public class DBManager {
    private final static String DB_URL = "jdbc:mysql://localhost:3306/mydb";
    private final static String DB_USERNAME = "root";
    private final static String DB_PASSWORD = "root";
    public static Connection conn = null;
    private static Statement stmt = null;

    /**
     * Tests connection with the database by getting connection using the
     * database url and username and password. And creates a dumb statement and
     * closes it to make sure everything is working fine.
     */
     static {
         try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager
                .getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
            stmt = conn.createStatement();
            stmt.close();
         } catch (Exception e) {
            e.printStackTrace();
         }
     }
}

现在,我可以轻松地执行以下操作:

PreparedStatement pstmt = DBManager.conn.prepareStatement("SELECT * FROM USER");

我正在自学 PHP,"most" 的在线教程实际上并没有教如何以正确的方式做事。

他们都以传统方式在每个需要连接的页面中进行:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

哪个是错误的,因为你说你想更改密码?然后,您必须在使用该密码的每个页面中更改它。

我的问题:我怎样才能对 PHP 中的 Java class 做些什么 equivalent/similar?

编辑:

<?php 
class DBManager {
   public static $conn = null;
   private static $hostname = "localhost";
   private static $username = "root";
   private static $password = "root";
   private static $dbname = "tutorme";

   protected function __construct() {
       try {
           DBManager::$conn = new PDO("mysql:host=localhost;dbname=tutorme", DBManager::$username, DBManager::$password);
           DBManager::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo "Error: " . $e->getMessage();
        }
    }

    public static function getInstance() {
        if (null === DBManager::$conn) {
            DBManager::$conn = new DBManager();
        }
       return DBManager::$conn;
   }
}
?>

我稍微搜索了一下,想出了上面的代码。但是,现在当我打电话给

$stmt = DBManager::getInstance()->prepare("INSERT INTO SUBJECT (SubjectTitle, SubjectName) VALUES (:subject,:subj)");

我收到一条错误消息,指出 DBManager 中没有名为 prepare()

的函数

这意味着我的 DBManager::getInstance 返回的是 DBManager object 而不是 PDO conn object

制作一个 class 就像 java 中的内容一样,我们称之为 database.php

在文件中你想做点什么

include 'database.php';
.... your code ..... 

提示:寻找 "autoload"

这是你想要的吗?

你犯了一个明显的错误:

DBManager::$conn = new DBManager();

你不想要那个!

只需调用 new DBManager()$conn 变量就会被初始化!

还有一些小改动,

<?php 
class DBManager {
    public static $conn = null;
    private static $hostname = "localhost";
    private static $username = "root";
    private static $password = "root";
    private static $dbname = "tutorme";

    private function __construct() {
        try { // why not using $hostname and $dbname?!
           DBManager::$conn = new PDO("mysql:host=" . DBManager::$hostname . ";dbname=" .DBManager::$dbname, DBManager::$username, DBManager::$password);
           DBManager::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
           echo "Error: " . $e->getMessage();
        }
    }

    // getConnection() is a better naming of the function
    public static function getConnection() {
        if (is_null(DBManager::$conn)) {
            new DBManager();
       }
       // now $conn is initialized
       return DBManager::$conn;
    }
 }
 ?>

你可以从这个开始

class Database{
    function __construct(){
        $this->host = HOST;
        $this->user = DB_USER;
        $this->pass = DB_PASS;
        $this->db = DATABASE;
        $this->con = $this->connect();
    }

    function connect(){
        $q = mysqli_connect($this->host, $this->user, $this->pass, $this->db);
        if($q) return $q; die("Couldn't Connect to Database");
    }
}

例如其他文件

include 'Database.php';
$db = new Database();
mysqli_query($db->con, "QUERY_HERE");