我正在尝试将数据插入到我的数据库中。我有三个页面。首先是 index.php 我在哪里。第二个是 db.php 保持与数据库的连接。第三个是 insert.php ,它包含插入代码。我面临的问题是,当我进行插入类 < , 数据库 类的em> child ,它工作正常,但当我使用插入类时,一个单独的类来自< strong>数据库 class.It给了我一个错误。简而言之,我无法将包含数据库连接 OBJECT 的变量传递给 insert 类。
的index.php
<?php
function __autoload($cl){
require_once "classes_lib/$cl.php";
}
$database = new db();
if(isset($_POST['submit']))
{
$name = $_POST['name'];
$email = $_POST['email'];
$ph = $_POST['phone'];
try
{
$ins = new insert($database);
echo $ins->insertUser($name, $email, $ph);
}
catch(PDOEXCEPTION $e)
{
echo $this->con_error . $e->getmessage();
}
}
classes_lib / db.php中
<?php
class db{
public $con;
public $con_error;
public function connect(){
try
{
$this->con = new PDO("mysql:host=localhost;dbname=oop","root","");
}
catch(PDOException $e)
{
echo $this->con_error = "An error in connecting to database" . $e->getmessage();
}
}
public function __construct(){
return $this->connect();
}
}
classes_lib / insert.php
<?php
class insert{
public $dbs;
public function __construct($database){
$this->dbs = $database;
return $this->dbs;
}
public function insertUser($name,$email,$ph){
$stmt = $this->con->prepare("INSERT INTO `users` (`name`,`email`,`phone`) VALUES (:name,:email,:phone)");
$stmt->bindParam(":name",$name);
$stmt->bindParam(":email",$email);
$stmt->bindParam(":phone",$ph);
$stmt->execute();
}
}
我对错误感到厌倦。任何帮助都将受到赞赏。
答案 0 :(得分:1)
为什么不像这样构建代码: 在index.php中:include / require插入类然后
if (isset($_POST['submit'])) {
//..call the insert class and pass the $_POST params in the insertUser method
$class_insert = new insert();
$class_insert->insertUser($_POST); // pass the values to the method
}
然后在你的类insert中,require_once db.php然后扩展它:
class insert extends db
{
// ..blah blah...
public function insertUser($data){ // $data = $_POST param
$database = new db();
$db = $database->connect();
$sql = "INSERT INTO users (name, email, phone) VALUES (:name, :email, :phone)";
$q= $db->prepare($sql);
$q->bindValue(':name',$data['name']);
$q->bindValue(':email',$data['email']);
$q->bindValue(':phone',$data['phone']);
$q->execute();
}
}