在PHP中从一个位置建立连接
在JSP中,如果我想连接到数据库,我将创建一个名为DBManager的Java类,代码如下:在PHP中从一个位置建立连接,php,database-connection,Php,Database Connection,在JSP中,如果我想连接到数据库,我将创建一个名为DBManager的Java类,代码如下: 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 = "
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,“大多数”在线教程实际上并没有教我如何正确地使用PHP
他们在需要连接的每个页面上都以传统方式进行操作:
$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类等效/相似的功能
编辑:
我得到一个错误,DBManager
中没有名为prepare()
这意味着我的
DBManager::getInstance
将返回一个DBManager对象
,而不是pdoconn对象
创建一个与java中类似的类,我们称之为database.php
在文件中,你想做些什么
include 'database.php';
.... your code .....
提示:寻找“自动加载”
这就是你想要的吗?你有一个明显的错误:
DBManager::$conn=newdbmanager()代码>
你不会想要的
只需调用newdbmanager()
,即可初始化$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");
我不知道您看过哪些教程,但有一个更好的教程,例如:显然,您不应该在每个文件中存储凭据。你提到的这些例子都是简单的例子,旨在展示事物是如何工作的。作者相信读者能够自己发现凭证也可以像应用程序的任何其他部分一样包含或导入。不是所有你第一眼看不到的东西都会自动地“吮吸”(用你的话来说)。相反,你应该对那些把业余时间花在写作上的作者说“谢谢”,因为他们可以从中获益。谢谢。@arkascha+1编辑了这篇文章。实际上,我的意思是,我从未见过一个教程教你关于PreparedStatement
,而不是一个普通的语句
。我不知道这与在每个文件中存储凭据有什么关系。这是完全不同的事情。但即便如此,你的观点是什么?这里有大约6683738567393个例子,可以单独在mysqli
或PDO
中使用预先准备好的语句,在google上有更多的例子。但事实上,事情对你来说要容易得多:你为什么不简单地阅读文档呢?它提供了你错过的关于准备好的陈述的例子。非常感谢!我一点也没看到!!我想知道为什么heckgetInstance()
会返回DBManager
对象。。。
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");