大家好,我收到此错误:
Catchable fatal error: Argument 1 passed to Users::__construct() must be an instance of PDO, none given, called in C:\xampp\htdocs\xampp\ooplogin\register.php on line 46 and defined in C:\xampp\htdocs\xampp\ooplogin\class\Users.php on line 9
要说真正的代码工作没有问题,但你知道如果我想制作干净的代码,那里应该有任何错误。
我的代码:
<?php
class Users {
/* Deklarovanie premennych */
public $name = null;
public $email = null;
public $phone = null;
public $message = null;
public function __construct(PDO $db_con)
{
$this->db_con = $db_con;
}
public function storeFormValues( $data )
{
if( isset( $data['name'] ) ) $this->name = stripslashes( strip_tags( $data['name'] ) );
if( isset( $data['email'] ) ) $this->email = stripslashes( strip_tags( $data['email'] ) );
if( isset( $data['phone'] ) ) $this->phone = stripslashes( strip_tags( $data['phone'] ) );
if( isset( $data['message'] ) ) $this->message = stripslashes( strip_tags( $data['message'] ) );
return $this;
}
public function message()
{
$correct = false;
try {
$sql = "INSERT INTO user(name, email, phone, message) VALUES (:name, :email, :phone, :message)";
$stmt = $this->db_con->prepare( $sql );
$stmt->bindValue( "name", $this->name, PDO::PARAM_STR );
$stmt->bindValue( "email", $this->email, PDO::PARAM_STR );
$stmt->bindValue( "phone", $this->phone, PDO::PARAM_STR );
$stmt->bindValue( "message", $this->message, PDO::PARAM_STR );
$stmt->execute();
return 'Sprava bola uspesne odoslana!';
}catch( PDOException $e ) {
return $e->getMessage();
}
}
public function displayAll()
{
try{
$sql = "SELECT * FROM users LIMIT 10";
$stmt = $this->db_con->prepare($sql);
$stmt->execute();
return $this->$stmt;
}catch( PDOException $e ) {
return $e->getMessage();
}
}
}
try {
$db_con = new PDO( DB_HOST, DB_USER, DB_PASS );
$db_con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db_con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch( PDOException $e ) {
return $e->getMessage();
}
$Users = new Users($db_con);
$Users->storeFormValues( $_POST );
echo $Users->message();
?>
我的 Index.php 看起来像:
<?php if( !(isset( $_POST['send'] ) ) ) { ?>
HTML FORM HERE
<?php
} else {
$Users = new Users;
$Users->storeFormValues( $_POST );
if( $Users->message() ) {
echo "Sprava bola úspešne odoslana";
} else {
echo "Sprava nebola odoslana";
}
}
?>
有人可以帮助我修复它或解释为什么它不起作用吗?谢谢!
最佳答案
您没有像错误消息所述那样传递 PDO 实例。
$Users = new Users;
编辑: 首先,不要复制/粘贴代码并期望它能够工作。我会告诉你该怎么做,但不会给你任何代码。
当您创建一个在其构造函数中带有参数(没有默认值)的类时,您必须传递参数才能使其工作。这就是您收到此错误的原因。我向您展示的行是抛出错误的地方。 Users 类需要一个 PDO 对象,但您没有传递任何内容。尽管您在类文件中做到了这一点:
$Users = new Users($db_con);
当然,您还需要像在类文件中那样初始化 $db_con 变量。
这将解决您的问题。我还有一些建议。
- 将每个类放入单独的文件中,并且不要在这些文件中执行类之外的任何代码。
- 将您的连接($db_conn 初始化)放在一个单独的文件中,以便您可以在任何需要的地方再次调用它。
- 请参阅
include
和require
函数,了解如何从其他文件获取代码以应用 1 和 2。
这些是非常基本的建议。有更复杂但更好的方法来做同样的事情,比如自动加载和 IoC 容器。但是,当开始编码时,为了保持理智,您可以将这些概念留到以后再学习。 :)
关于php - 可捕获的错误 - 参数必须是 PDO 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723007/