抽象类方法与数据库交互不起作用,

时间:2014-04-23 14:33:06

标签: php mysql abstraction

我有一个名为user的类。我试图使一些通常的数据库方法抽象,所以我可以将所有这些函数转移到数据库'超级对象'。

    class User {

        protected static $table_name="users";
        protected static $db_fields = array('id', 'first_name');

        public $id;
        public $first_name;


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

这是我对我的create方法所做的,使它与类无关。正如您所看到的,它非常简单 - 只有两个数据库字段的名字和id。 id设置为not NULL和autoincrement。我的问题是......

$ database-> insert_id()方法只是通过此连接拉取数据库中创建的最后一个ID。

如果我按如下方式运行简单的创建

 $user = new User();
 $user->first_name = "Paul";
 $user->create();

我明白了......

 Database query failed: Incorrect integer value: '' for column 'id' at row 1

 Last SQL query: INSERT INTO test_user (id, first_name) VALUES ('', 'Paul')

就我所见,$ sql语句是正确的。我知道问题是ID未设置但是如果设置为自动增量不应该自动设置.....

另外......我知道PDO是要走的路,但是现在(我正逐步学习它),有人可以帮我解决这个问题......

1 个答案:

答案 0 :(得分:0)

自定义功能创建。这适用于上述情况。

public function create()  { 

    global $database;

    foreach($this->sanitized_attributes() as $key=>$attribute) {
        if ((is_null($attribute)) || empty($attribute)) {
            $attributes[$key] = "null";
        } else {
            $attributes[$key] = "'" . $attribute . "'";
        }
    } 
    $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;
    }
}