[英]Database connection with PDO and Singleton class
我正在嘗試與PDO和Singleton類建立數據庫連接,但我在從數據庫中獲取數據時遇到問題。
我一直在閱讀這篇文章,但我仍然不確定如何從我的數據庫文件中調用另一個文件中的Singelton類並打印出結果。 我現在得到的錯誤是Fatal error: Call to undefined function query()
在我的db.php文件中Fatal error: Call to undefined function query()
,這是我數據庫文件中的最后一個函數。 但是我相信功能是定義的。
任何幫助表示贊賞!
這是我的數據庫(db.php)連接文件:
<?php
class Database
{
private $_db;
static $_instance;
private function __construct() {
$this->_db = new PDO('mysql:host=localhost;dbname=mvcuser', 'root', '');
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
private function __clone(){}
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function query($sql) {
return query($this->_db,$sql);
}
}
這是我的index.php文件中的代碼:
<?php
require_once 'model/db.php';
$db = Database::getInstance();
$db->query('SELECT * FROM users');
if ($result = $db->query($query)) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo $row;
}
}
您的Database::query
方法的定義沒有意義。 看起來你正在調用一些PHP函數query
(它不存在),因此你得到錯誤。
我想你可能想把方法的定義改為:
public function query($sql) {
return $this->_db->query($sql);
}
更新:並在您的index.php
$db = Database::getInstance();
$statement = 'SELECT * FROM users';
if ($result = $db->query($statement)) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo $row;
}
}
我知道這個任務有點老了,但對於那些從Google發現它的人來說,如果你不想為每個PDO方法創建一個包裝器方法,你可以在你的單例類中使用它。
public function __call ( $method, $args ) {
if ( is_callable(array($this->_db, $method)) ) {
return call_user_func_array(array($this->_db, $method), $args);
}
else {
throw new BadMethodCallException('Undefined method Database::' . $method);
}
}
現在您可以使用$db->query($statement)
或任何其他PDO方法,而無需在單例類中定義它。
剛想到這個問題。 我以不同的方式連接數據庫。 它也包括在內。 就像這樣。
PHP
class try_connect
{
function connect($s_name,$db_name,$user,$pass)
{
$this->s_name = $s_name;
$this->db_name = $db_name;
$this->user = $user;
$this->pass = $pass;
try {
$db = new PDO("mysql:host=$s_name;dbname=$db_name","$user","$pass");
if ($db) {
echo $db->query("select database()")->fetch(PDO::FETCH_COLUMN);
}else {
echo "fail";
}
} catch (Exception $e) {
print $e->getMessage();
}
}
}
if (isset($_POST["submit"])) {
$get_server_name = $_POST["server_name"];
$get_db_name = $_POST["database_name"];
$get_user = $_POST["user"];
$get_pass = $_POST["password"];
$connect = new try_connect();
$connect->connect($get_server_name,$get_db_name,$get_user,$get_pass);
}
HTML
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<p><input type="text" name="server_name"></p>
<p><input type="text" name="database_name"></p>
<p><input type="text" name="user"></p>
<p><input type="text" name="password"></p>
<p><input type="submit" name="submit"></p>
</form>
編碼真的很好。 我喜歡它。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.