0

以前取り組んでいたプロジェクトからやり直しました。私の PHP の本と Stack Overflow に関する数人の人の助けを借りて、私は発生していた多くのエラーを取り除くことができました。

今、警告と致命的なエラーが残っています。私は両方のエラーを理解していますが、発生しているエラーを修正する方法がわかりません。誰でも助けてもらえますか?私は誰かにコードを書くように頼んでいるわけではありませんし、私のためにすべてをやってもらっているわけでもありません。正しい方向へのポイントが必要なだけです。

これは警告であり、uploadFile() メソッドのどこかに __construct を配置する必要があるように思えますが、これについてもよくわかりません。

警告: PDO::prepare() [pdo.prepare]: SQLSTATE[00000]: エラーなし: C:\xampp\htdocs\files\upload.php 行 23 で PDO コンストラクターが呼び出されませんでした

第二に、私は何をすべきかについて完全に迷っています。エラーが何を伝えているかは理解していますが、修正するためにどこから始めればよいかわかりません。ここにあります:

致命的なエラー: 24 行目の C:\xampp\htdocs\files\upload.php の undefined メソッド 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();

config.php

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

編集:ここにいる皆さんのおかげで、残っているエラーは1つだけで、次のとおりです。

致命的なエラー: C:\xampp\htdocs\files\upload.php の 43 行目の未定義メソッド stdClass::uploadFile() の呼び出し

編集 2: すべてのエラーは解決されましたが、データベースには何も挿入されていません。

4

3 に答える 3

1

よく 2 人が別の問題を指摘しましたが、ここで本当に重要なのは、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 が null であるためです。変化する

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

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

また、以前の回答を変更しました。bindparam() の 2 番目のパラメーターを参照してください。

于 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 に答える