CRUD是指對數據庫進行增加(create)、查詢(read)、修改(update)、刪除(delete)的操作。在Web開發中,使用PHP語言進行CRUD操作是非常常見的,因為PHP是一種廣泛應用的Web編程語言,且有許多開源的框架可以使用。
舉個例子,假設我們有一張關于學生成績的表格,包含學生ID,學生姓名,考試科目,考試成績等信息。如果要對這個表格進行CRUD操作,要怎樣去做呢?
// 創建(Create)
function create($table, $data){
$keys = implode(',', array_keys($data));
$values = ":".implode(', :', array_keys($data));
$sql = "INSERT INTO $table ($keys) VALUES ($values)";
$stmt = $this->db->prepare($sql);
foreach ($data as $key =>$value) {
$stmt->bindValue(":$key", $value);
}
$stmt->execute();
return $this->db->lastInsertId();
}
// 讀取(Read)
function read($table, $id=null){
$sql = "SELECT * FROM $table";
if($id != null){
$sql .= " WHERE id=:id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id, \PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetch(\PDO::FETCH_ASSOC);
}else{
$stmt = $this->db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
// 更新(Update)
function update($table, $data, $id){
$values = '';
foreach ($data as $key =>$value) {
$values .= "$key=:$key,";
}
$values = rtrim($values, ',');
$sql = "UPDATE $table SET $values WHERE id=:id";
$stmt = $this->db->prepare($sql);
foreach ($data as $key =>$value) {
$stmt->bindValue(":$key", $value);
}
$stmt->bindParam(':id', $id, \PDO::PARAM_INT);
return $stmt->execute();
}
// 刪除(Delete)
function delete($table, $id){
$sql = "DELETE FROM $table WHERE id=:id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':id', $id, \PDO::PARAM_INT);
return $stmt->execute();
}
以上是一種使用PDO擴展進行數據庫操作的PHP類,對四種CRUD操作都做了封裝。值得注意的是,為了防止SQL注入攻擊,使用了bindParam()方法和bindValue()方法綁定參數。
下面我們來分別詳細講解每一種操作:
1. 創建(Create)
創建數據(也就是插入數據)是CRUD中的C操作,對應著INSERT sql語句。在PHP中,使用PDO的prepare()方法可以安全地預處理sql語句,bindValue()方法可以綁定預處理語句中的參數:
//插入一條數據,返回插入條目的id
$data = ['name' =>'Jack', 'subject' =>'Math', 'score' =>92 ];
$id = $db->create('score_table', $data);
2. 讀取(Read)
讀取操作是CRUD中的R操作,對應著SELECT sql語句。如果只需要讀取一條數據,可以使用fetch()或fetchObject()方法,如果需要讀取多條數據,則需要使用fetchAll()方法。
//讀取一條id為12的數據
$data = $db->read('score_table', 12);
print_r($data);
//讀取全部數據
$data = $db->read('score_table');
print_r($data);
3. 更新(Update)
更新操作是CRUD中的U操作,對應著UPDATE sql語句。使用bindValue()方法,可以綁定預處理語句中的參數。注意這里的$id參數必須指定,不然會將整個表的數據都更新掉。
//更新id為12的數據
$data = ['name' =>'Jack', 'subject' =>'Math', 'score' =>85 ];
$db->update('score_table', $data, 12);
4. 刪除(Delete)
刪除操作是CRUD中的D操作,對應著DELETE sql語句。使用bindValue()方法,可以綁定預處理語句中的參數。
//刪除id為12的數據
$db->delete('score_table', 12);
以上就是常見的CRUD操作在PHP中的實現方法。在實際應用中,我們需要根據需要進行適當的封裝,以便我們更方便地進行數據操作。