由于某种原因,我收到此错误:
Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Project_6\Quiz\database.class.php on line 55
这可能是因为 $db 变量不是 PDO 的对象,尽管它是。这与它在 __construct
中的事实有什么关系吗?方法?或者我需要在 insertquery 函数中传递它吗?
我还在我的index.php 中调用了我的类数据库的一个对象,我的HTML 也位于其中。 在index.php中我还调用了Insertquery函数
这是我的数据库类:
class Database{
//constantes zijn geen properties want die kan je niet veranderen
const DB_HOSTNAME = "localhost";
const DB_USERNAME = "root";
const DB_PASSWORD = "";
const DB_NAME = "quiz";
private $typedb = "mysql";
public $db;
//protected $_sql;
public function __construct(){
//heeft geen conditie nodig. moet uitgevoerd worden dus try
try
{
//object aanroepen van de class PDO (ingebouwd in PHP)
$db = new PDO($this->typedb.':host='.self::DB_HOSTNAME.';dbname='.self::DB_NAME, self::DB_USERNAME, self::DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
//anders wat? heeft wel een conditie nodig, bij een exception van PDO dus, die store je in de $e
catch(PDOException $e)
{
return $e->getMessage();
}
}
//$values verwacht $_POST waardes dus is al array
public function insertQuery($table, array $cols, array $values){
//$insert in een for each loop
$column_list = implode(",", $cols); //returns string: 'username, password'
$post_params = implode(",", $values);
$count = 0;
//de PDO parameters maken, met een ':'voor de columnnaam
foreach($cols as $insert_values){
$count++;
//doe dit voor het aantal kolommen
if($count < $cols){
$insert_values = ":".$column_list;
}
}
$query = 'INSERT INTO $table ($column_list) VALUES ($insert_values)'; //"INSERT INTO users (username, password) VALUES(:username, :password)
$insert = $this->db->prepare($query);
//voor elke kolom een binding
foreach($values as $post_params){
$count++;
if($count < $cols){
$insert->bindParam($insert_values, $post_params);
}
}
$insert->execute();
}
public function selectQuery(){
// SELECT FROM WHERE ORDER BY
}
public function updateQuery(){
}
public function deleteQuery(){
}
}
这是我的 INDEX.PHP 代码:
//require_once omdat als file niet werkt of gevonden kan worden het script niet werkt
require_once 'database.class.php';
require_once 'user.class.php';
$db = new Database();
if(isset($_POST['reg_submit'])){
$users_cols = array("username", "password");
$post_values = array($_POST['regUsername'], $_POST['regPassword']);
$db->insertQuery('users', $users_cols, $post_values);
}
最佳答案
您没有将数据库句柄保存在公共(public)变量中。您在这里使用$this-db
。
$insert = $this->db->prepare($query);
但是在构造函数中,您不会将 PDO 连接保存在该变量中。
$db = new PDO($this->typedb.':host='.self::DB_HOSTNAME.';dbname='.self::DB_NAME, self::DB_USERNAME, self::DB_PASSWORD);
应该是:
$this->db = new PDO($this->typedb.':host='.self::DB_HOSTNAME.';dbname='.self::DB_NAME, self::DB_USERNAME, self::DB_PASSWORD);
否则连接不会保存在$this->db
中。
关于php - fatal error : Call to a member function prepare() on a non-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27964858/