Php prepare()未定义

Php prepare()未定义,php,oop,pdo,Php,Oop,Pdo,在过去的两天里,我一直在做一个项目,不管我怎么做,我都会遇到某种错误,或者是有些东西不起作用。此时,我被告知我正在调用一个未定义的方法upload:prepare(),这是真的,因为该类被称为upload,语句是$this->prepare()…等等 我很沮丧,无论我做什么,我都无法理解这一点 classes.php <?php require('config.php'); error_reporting(E_ALL); /* * Classes required by the scri

在过去的两天里,我一直在做一个项目,不管我怎么做,我都会遇到某种错误,或者是有些东西不起作用。此时,我被告知我正在调用一个未定义的方法upload:prepare(),这是真的,因为该类被称为upload,语句是$this->prepare()…等等

我很沮丧,无论我做什么,我都无法理解这一点

classes.php

<?php
require('config.php');
error_reporting(E_ALL);
/*
 * Classes required by the script
 * 
 */

class database extends PDO
{
    public $conURL;

    public function __construct($config) {
        $conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
        try {
         parent::__construct($conURL, $config['user'], $config['pass']);
        } catch (PDOException $e) {
            $e->getMessage();
        }
    }       
}

class upload
{
    public $_FILES;

    public function uploadFile() {
        if ($_FILES['file']['size'] >= 2000000) {
           echo "File is too large!";
        }
        elseif (isset($_FILES['file'])) {
           $stmt = $this->prepare("INSERT INTO upload (name, type, size, content) VALUES (?, ?, ?, ?)");
           $stmt->execute(array($_FILES['file']['name'], $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['file']));
        }
    }
}
<?php
$config = array(
        'host' => 'localhost', // db host
        'user' => 'root', // db user
        'pass' => 'mypassword', //db pass
        'db' => 'files' // db name
);
<?php
error_reporting(E_ALL);
require('config.php');
require('classes.php');

$dbh = new database($config);
$upload = new upload();
$upload->uploadFile();

您试图调用
上传
准备
功能,而不是
数据库
。试试这个:

class upload
{
    public $_FILES;

    public function uploadFile($config) {
        $db = new database($config);
        if ($_FILES['file']['size'] >= 2000000) {
           echo "File is too large!";
        }
        elseif (isset($_FILES['file'])) {
           $stmt = $db->prepare("INSERT INTO upload (name, type, size, content) VALUES (?, ?, ?, ?)");
           $stmt->execute(array($_FILES['file']['name'], $_FILES['file']['type'], $_FILES['file']['size'], $_FILES['file']['file']));
        }
    }
}

我想你是想用
数据库->准备
而不是
这个->准备


您需要为上载类获取一个数据库实例(或动态创建它)。

使用该实例获得一批新错误:警告:缺少数据库的参数1::\u construct(),第28行在htdocs/files/classes.php中调用,第13行在htdocs/files/classes.php中定义注意:未定义变量:第14行在htdocs/files/classes.php中定义注意:未定义变量:第16行在/Applications/MAMP/htdocs/files/classes.php中配置注意:未定义变量:在/Applications/MAMP/htdocs/files/classes.php中配置第16行注意:未定义索引:第34行/Applications/MAMP/htdocs/files/classes.php中的文件已修复。我错过了
数据库
构造函数的参数。太棒了!谢谢我仍然有两个问题,这两个问题都不应该发生。它说$config是未定义的,它不是,它是在config.php中定义的,索引“file”也是未定义的,它不是,因为我使用HTML表单传递数据。老实说,这超出了这个问题的范围。我会用相关的HTML发布一个新问题。别忘了投票/接受!我将在56秒后接受非常感谢您的帮助,我将在一个新问题中发布HTML。我知道$this是不正确的,但是如果我从数据库类调用prepare(),那么我被告知我不能静态调用prepare()。您需要一个数据库类的实例来调用prepare。