大家好,我的代码遇到了问题。请参阅下面我的当前代码。 我想要实现的是将我的数据库字段(id,name,type)设置为公共属性。
Ex:
public $id;
public $name;
public $type;
我希望你能帮助我。 :)
错误:
Warning: Missing argument 1 for Animals::__construct() in C:\Program Files\xampp\htdocs\pdo_intro\index.php on line 8
Notice: Undefined variable: dbh in C:\Program Files\xampp\htdocs\pdo_intro\index.php on line 10
Fatal error: Call to a member function prepare() on a non-object in C:\Program Files\xampp\htdocs\pdo_intro\index.php on line 20
我当前的代码
class Animals{
public $db_fields;
private $dbh;
public function __construct($dbh){
$this->dbh = $dbh;
$this->db_fields = $this->get_fields();
foreach($this->db_fields as $field){
$this->$field = "";
}
}
public function get_fields(){
$q = $this->dbh->prepare("DESCRIBE animals");
$q->execute();
$db_fields = $q->fetchAll(PDO::FETCH_COLUMN);
return $db_fields;
}
public function capitalizeType($t){
return ucwords($t);
}
}
/*** mysql hostname ***/
$hostname = 'localhost';
/*** mysql username ***/
$username = 'root';
/*** mysql password ***/
$password = '';
/*** mysql database***/
$dbname = 'animals';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
$animal = new Animals($dbh);
/*** echo a message saying we have connected ***/
$sql = "SELECT * FROM animals";
$result = $dbh->query($sql);
while ($r = $result->fetchObject('animals')){
echo $animal->capitalizeType($r->animal_type) . "<br />";
}
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
我尝试了__construct($ dbh =“”),但错误仍然是
Fatal error: Call to a member function prepare() on a non-object in C:\Program Files\xampp\htdocs\pdo_intro\index.php on line 20
答案 0 :(得分:3)
您的问题似乎在这里,
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname;charset=utf8", $username, $password);
$animal = new Animals($dbh);
您的数据库连接不起作用,检查您的用户名和密码等。如果$ dbh没有返回一个对象,那么该构造的第一个参数将为空,设置默认值将无法修复它,因为其余的代码取决于传递给对象的值,“”不是对象。
答案 1 :(得分:0)
这里:
while ($r = $result->fetchObject('animals')){
echo $animal->capitalizeType($r->animal_type) . "<br />";
}
您正在将数据提取到Animals
类,但是在创建新对象时PDO不会将任何内容传递给它的构造函数。
此外,您不必担心属性,如果不存在,PDO会为您创建属性。