我从一个我之前正在研究的项目开始。借助我的PHP书和Stack Overflow上的一些人,我能够摆脱我遇到的很多错误。
现在,我留下了警告和致命错误。我理解这两个错误,我只是不确定如何解决我得到的错误。有人可以帮忙吗?我不要求任何人编写代码或只为我做一切,我只需要一个正确的方向。
这是警告,听起来我需要将__construct放在uploadFile()方法的某个地方,但同样不确定:
警告:PDO :: prepare()[pdo.prepare]:SQLSTATE [00000]:没有错误:PDO 没有在C:\ xampp \ htdocs \ files \ upload.php中调用构造函数 23
第二,我完全不知道该怎么做。我意识到错误告诉了我什么,我只是不知道从哪里开始修复它。这是:
致命错误:调用未定义的方法upload :: bindParam() 第24行的C:\ xampp \ htdocs \ files \ upload.php
如果我能提供更多信息可以让您更容易回答,请告诉我,我会尽力为您服务。我感谢任何帮助!
upload.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
);
编辑:感谢大家在这里,只剩下一个错误,它是以下内容:
致命错误:调用未定义的方法stdClass :: uploadFile()in 第43行的C:\ xampp \ htdocs \ files \ upload.php
编辑2:所有错误都已解决,但没有任何内容插入数据库。
答案 0 :(得分:1)
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-&gt; conURL为null。变化
$conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
到
$this->conURL = "mysql:host=" . $config['host'] . ";dbname=" . $config['db'];
我也改变了之前的答案,请参阅bindparam()的第二个参数。
答案 1 :(得分: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']);
}
答案 2 :(得分:0)
因为您正在扩展PDO,所以
return new PDO($this->conURL, $config['user'], $config['pass']);
应该是
parent::__construct($this->conURL, $config['user'], $config['pass']);