我正在尝试使用PDO创建一个SQL表。
这是add.php:
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
echo "Connexion success...";
$sq = DB_CONNECT::$con->query($table);
if ($sq) {
echo 'Table created...';
}
?>
这是连接类db_connect.php:
class DB_CONNECT {
// constructor
function __construct() {
// connecting to database
return $this->connect();
}
/**
* Function to connect with database
*/
function connect() {
// import database connection variables
require_once __DIR__ . '/db_config.php';
// Connecting to mysql database and selecting database
try {
$con = new PDO(DB_DSN, DB_USER, DB_PASSWORD);
} catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
// returing connection cursor
return $con;
}
}
当我尝试查询数据库时,收到以下错误消息:
Connexion成功......致命错误:访问未声明的静态属性:第15行的/public_html/toutain/add.php中的DB_CONNECT :: $ con
答案 0 :(得分:3)
这段代码混合了很多方法。它目前只是一个包含在类中的实用函数。
使用new DB_CONNECT;
进行实例化毫无意义,因为您的方法中的new PDO
句柄不会保留为属性,例如$this->con
。
使用return $con
实际上不会通过构造函数返回PDO实例。您的new DB_CONNECT
只会返回一个DB_CONNECT
对象,其中包含本地$con
变量;因此无法实际调用任何PDO方法。
目前,您只能将其用作:
$pdo = DB_CONNECT::connect();
然后从那里调用$pdo->query()
。
// connecting to db
$pdo = DB_CONNECT::connect();
$result = $pdo->query($table);
if ($result) {
echo 'Table created...';
}
答案 1 :(得分:0)
这一行
$sq = DB_CONNECT::$con->query($table);
应该是
$sq = $db->query($table);
您的班级定义应为
require_once __DIR__ . '/db_config.php';
class DB_CONNECT extends PDO {
public function __construct() {
try{
parent::__construct(DB_DSN, DB_USER, DB_PASSWORD);
}catch(PDOException $e){
die('Erreur : ' . $e->getMessage());
}
}
}
我在工作中使用类似的类,所以这应该构造函数应该适合你,你可以删除连接函数