我有一个名为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是要走的路,但是现在(我正逐步学习它),有人可以帮我解决这个问题......
答案 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;
}
}