MYSQL文件大小未显示

时间:2011-03-13 06:32:27

标签: php mysql

我正在学习如何使用PHP视频书/教程构建photo_gallery。我能够上传照片,但在MySQL数据库中,它没有注册照片的大小。它只是说0(见图)

教师的Mysql给出了文件的大小。

知道为什么文件大小不会出现在SQL中吗?

MySQL

更新......这是照片类。

<?php

require_once(LIB_PATH.DS.'database.php');

class Photograph extends DatabaseObject {

protected static $table_name="photographs";
protected static $db_fields=array('id', 'filename', 'type', 'caption');
public $id;
public $filename;
public $type;
public $size;
public $caption;

private $temp_path;
protected $upload_dir="images";
public $errors=array();

protected $upload_errors = array(
UPLOAD_ERR_OK         => "No errors.",
UPLOAD_ERR_INI_SIZE   => "Larger than upload_max_filesize.",
UPLOAD_ERR_FORM_SIZE  => "Larger than form MAX_FILE_SIZE.", 
UPLOAD_ERR_PARTIAL    => "Partial upload.",
UPLOAD_ERR_NO_FILE    => "No file.",
UPLOAD_ERR_NO_TMP_DIR => "No temporary directory.",
UPLOAD_ERR_CANT_WRITE => "Can't write to disk.",
UPLOAD_ERR_EXTENSION  => "File upload stopped by extension."

);

// Pass in $_FILE(['uploaded_file']) as an argument
public function attach_file($file) {
//perform error checking on the form parameters
if(!file || empty($file) || !is_array($file)){
//error: nothing uploaded or wrong usage
$this->errors[] = "No file was uploaded.";
return false;
} elseif($file['error'] !=0) {
//error: report what PHP says went wrong
$this->errors[] = $this->upload_errors[$file['error']];
return false;
} else {

//set object attributes to the form parameters.
$this->temp_path = $file['tmp_name'];
$this->filename  = basename($file['name']);
$this->type      = $file['type'];
$this->size      = $file['size'];
//don't worry about saving anything to the database yet
return true;
    }
}

public function save() {
// a new record won't have an id yet.
if(isset($this->id)) {
//really just to update the caption
$this->update();
} else {
//make sure there are no errors

//Can't save if there are pre-existing errors
if(!empty($this->errors)) {return false; }

//make sure the caption is not too long for the DB
if(strlen($this->caption) > 255) {
$this->error[] = "The caption can only be 255 characters long.";
return false;
}

//Can't save without filename and temp location
if(empty($this->filename) || empty($this->temp_path)){
$this->errors[] = "The file location was not available.";
return false;
}

//Determine the target_path
$target_path = SITE_ROOT .DS. 'public' .DS. $this->upload_dir .DS. $this->filename;

//Make sure a file doesn't already exist

if(file_exists($target_path)) {
$this->errors[] = "The file {$this->filename} already exists.";
return false;
}

//attempt to move the file
if(move_uploaded_file($this->temp_path, $target_path)) {
//success
//save a corresponding entry to the database
if($this->create()) {
//we are done with temp_path, the file isn't there anymore
unset($this->temp_path);
return true;
}
} else {
//failure
$this->errors[] = "The file upload failed, possibly due to incorrect permissions
on the upload folder.";
return false;
        }
    }
}

//common database methods

public static function find_all(){
return self::find_by_sql("SELECT * FROM ".self::$table_name);

}

public static function find_by_id($id=0) {
global $database;
$result_array = self::find_by_sql("SELECT * FROM ".self::$table_name." WHERE id={$id} LIMIT 1");
return !empty($result_array) ? array_shift($result_array) : false; 
}

public static function find_by_sql($sql=""){
global $database;
$result_set = $database->query($sql);
$object_array = array();
while ($row = $database->fetch_array($result_set)) {
$object_array[] = self::instantiate($row);
}
return $object_array;
}




private static function instantiate($record){

$object = new self;
//$object->id = $record['id'];
//$object->username = $record['username'];
//$object->password = $record['password'];
//$object->first_name = $record['first_name'];
//$object->last_name = $record['last_name'];

foreach($record as $attribute=>$value) {
if($object->has_attribute($attribute)) {
$object->$attribute = $value;
}
}
return $object;
}

private function has_attribute($attribute) {
$object_vars = $this->attributes();
return array_key_exists($attribute, $object_vars);
}

protected function attributes() {
//return an array of attribute keys and their values
$attributes = array();
foreach(self::$db_fields as $field) {
if(property_exists($this, $field)) {
$attributes[$field] = $this->$field;
}
}
return $attributes;
}

protected function sanitized_attributes() {
global $database;
$clean_attributes = array();
//sanitize the values before submitting
//Note: does not alter the actual value of each attribute
foreach($this->attributes() as $key=> $value) {
 $clean_attributes[$key] = $database->escape_value($value);
}
  return $clean_attributes;
}

//replaced with a custom save()
//public function save() {
//return isset($this->id) ? $this->update() : $this->create();
//}

public function create() {
global $database;
$attributes = $this->sanitized_attributes();
$sql = "INSERT INTO ".self::$table_name." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
if ($database->query($sql)) {
$this->id = $database->insert_id();
return true;
} else {
  return false;
}
}

public function update() {
global $database;
$attributes = $this->sanitized_attributes();
$attribute_pairs = array();
foreach($attributes as $key => $value) {
  $attribute_pairs[] = "{$key}='{$value}'";
}
$sql = "UPDATE ".self::$table_name." SET ";
$sql .= join(", ", $attribute_pairs);
$sql .= " WHERE id=". $database->escape_value($this->id);
$database->query($sql);
return($database->affected_rows() == 1) ? true : false;
}

public function delete() {
global $database;
$sql = "DELETE FROM ".self::$table_name." ";
$sql .= "WHERE id=". $database->escape_value($this->id);
$sql .= " LIMIT 1";
$database->query($sql);
return($database->affected_rows() == 1) ? true : false;

}

}

&GT;

1 个答案:

答案 0 :(得分:3)

我认为您忘记在$db_fields

中添加尺寸
protected static $db_fields=array('id', 'filename', 'type', 'size', 'caption');

如果您查看attributes()函数,它会检查$db_fields中是否存在property_exists,然后将值分配给$attributes数组,因为'size'不在数组中你正在检查,它基本上被过滤掉是我猜的:

protected function attributes() {
     //return an array of attribute keys and their values
     $attributes = array();
     foreach(self::$db_fields as $field) {
         if(property_exists($this, $field)) {
             $attributes[$field] = $this->$field;
         }
     }
     return $attributes;
}