0

我重新开始了我之前正在做的一个项目。在我的 PHP 书籍和 Stack Overflow 上的一些人的帮助下,我能够摆脱我遇到的许多错误。

现在,我留下了一个警告和一个致命错误。我理解这两个错误,我只是不确定如何解决我遇到的错误。有人可以帮忙吗?我不是要求任何人编写代码或只是为我做所有事情,我只需要指出正确的方向。

这是警告,听起来我需要将 __construct 放在 uploadFile() 方法中的某个位置,但同样,对此不确定:

警告:PDO::prepare() [pdo.prepare]: SQLSTATE[00000]: No error: PDO constructor was not called in C:\xampp\htdocs\files\upload.php on line 23

第二,我完全不知道该怎么办。我意识到错误告诉我什么,我只是不知道从哪里开始修复它。这里是:

致命错误:在第 24 行调用 C:\xampp\htdocs\files\upload.php 中未定义的方法 upload::bindParam()

如果我可以提供更多信息可以使这个问题更容易回答,请告诉我,我会尽力为您获取。我很感激任何帮助!

上传.php

  <?php
error_reporting(E_ALL);
require('config.php');

class upload extends PDO
{
    public $conURL, $filename, $tmpname, $filesize, $filetype, $file;

    public function __construct($config) {
        $conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
        parent::__construct($conURL, $config['user'], $config['pass']);

    }       

    public function uploadFile() {
        if ($_FILES['file']['size'] >= 2000000) {
           echo "File is too large!"; 
        }
        else {
            $sth = $this->prepare("INSERT INTO uploads (name, type, size, file) VALUES (?, ?, ?, ?)");
            $sth->bindParam(1, $filename);
            $sth->bindParam(2, $filetype);
            $sth->bindParam(3, $filesize);
            $sth->bindParam(4, $file);
            $sth->execute();
        }
    }
}

$upload = new upload($config);

$upload->filename = $_FILES['file']['name'];
$upload->tmpname = $_FILES['file']['tmp_name'];
$upload->filesize = $_FILES['file']['size'];
$upload->filetype = $_FILES['file']['type'];    
$upload->file = $_FILES['file'];


$upload->uploadFile();

配置文件

<?php
$config = array(
        'host' => 'localhost', // db host
        'user' => 'root', // db user
        'pass' => '', //db pass
        'db' => 'files' // db name
);

编辑:感谢这里的每个人,只剩下一个错误,如下所示:

致命错误:在第 43 行调用 C:\xampp\htdocs\files\upload.php 中未定义的方法 stdClass::uploadFile()

编辑 2:所有错误都已解决,但没有任何内容插入到数据库中。

4

3 回答 3

1

好吧,两个人指出了另一个问题,但真正的重点是您正在调用 PDO 子类的 bindParam。这需要被pdostatement替换。尝试:

        $sth = $this->prepare("INSERT INTO uploads (name, type, size, file) VALUES (?, ?, ?, ?)");
        $sth->bindParam(1, $this->filename);
        $sth->bindParam(2, $this->filetype);
        $sth->bindParam(3, $this->filesize);
        $sth->bindParam(4, $this->file);
        $sth->execute();

当然,您还需要修复构造函数中的以下错误。

编辑:

我猜构造函数失败并抛出异常。因为 $this->conURL 为空。改变

$conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];

$this->conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];

另外我更改了我之前的答案,请参阅 bindparam() 的第二个参数。

于 2012-07-19T04:07:19.207 回答
0

您的构造函数应如下所示:

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();
        }
}  

甚至

public function __construct($config)
{
    $conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
    parent::__construct($conURL, $config['user'], $config['pass']);
}  
于 2012-07-19T04:03:30.200 回答
0

因为您正在扩展 PDO,所以

return new PDO($this->conURL, $config['user'], $config['pass']);

应该

parent::__construct($this->conURL, $config['user'], $config['pass']);
于 2012-07-19T04:04:03.637 回答