prepare($query); foreach($data as $key => $val){ $stmt->bindValue(':' . $key, $val); } if($stmt->execute()){ return $db->lastInsertId(); } }catch(Exception $e) { error_log($e->getMessage()); return false; } } public static function update($table, $data, $where, $whitelist = []){ if(!self::assertIdent($table)){ throw new \InvalidArgumentException('Invalid table name'); } $db = Sys::getConnection(); if(!empty($whitelist)){ $data = array_intersect_key($data, array_flip($whitelist)); } if(empty($data)){ return false; } $setParts = []; $whereParts = []; // Set foreach($data as $key => $val){ $setParts[] = "$key = :$key"; } $setSql = implode(', ', $setParts); // Where foreach($where as $key => $val){ $whereParts[] = "$key = :w_$key"; } $whereSql = implode(' AND ', $whereParts); $query = "UPDATE $table SET $setSql WHERE $whereSql"; try{ $stmt = $db->prepare($query); foreach($data as $key => $val){ $stmt->bindValue(':' . $key, $val); } foreach($where as $key => $val){ $stmt->bindValue(':w_' . $key, $val); } return $stmt->execute(); }catch(Exception $e){ error_log($e->getMessage()); return false; } } public static function select($table, $list = [], $where = [], $multiple = false, $assoc = true){ if(!self::assertIdent($table)){ throw new \InvalidArgumentException('Invalid table name'); } foreach($list as $col){ if(!self::assertIdent($col)){ throw new \InvalidArgumentException('Invalid where name'); } } foreach($where as $k => $_){ if(!self::assertIdent($k)){ throw new \InvalidArgumentException('Invalid where key'); } } $db = Sys::getConnection(); if(empty($list)){ $query = "SELECT * FROM $table"; }else{ $querySelect = implode(', ', $list); $query = "SELECT $querySelect FROM $table"; } if(!empty($where)){ $whereParts = []; foreach($where as $key => $val){ $whereParts[] = "$key = :w_$key"; } $whereSql = implode(' AND ', $whereParts); $query .= " WHERE $whereSql"; } try{ $stmt = $db->prepare($query); foreach($where as $key => $val){ $stmt->bindValue(':w_' . $key, $val); } if($stmt->execute()){ $mode = $assoc ? PDO::FETCH_ASSOC : PDO::FETCH_COLUMN; return $multiple ? $stmt->fetchAll($mode) : $stmt->fetch($mode); } return false; }catch(Exception $e){ error_log($e->getMessage()); return false; } } public static function query($sql, $params = [], $multiple = true, $assoc = true){ $db = Sys::getConnection(); try{ $stmt = $db->prepare($sql); if(!empty($params)){ foreach($params as $key => $val){ $stmt->bindValue(':' . $key, $val); } } if($stmt->execute()){ $mode = $assoc ? PDO::FETCH_ASSOC : PDO::FETCH_COLUMN; return $multiple ? $stmt->fetchAll($mode) : $stmt->fetch($mode); } return false; }catch(Exception $e){ error_log($e->getMessage()); return false; } } public static function curl($url, $data = [], $headers = []){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); if(!empty($data)){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $headers[] = 'Content-Type: application/json'; } if(!empty($headers)){ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); } try{ $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); if($error){ error_log('Curl erro: ' . $error); return false; } return [ 'status' => $httpCode, 'body' => json_decode($response, true) ?? $response ]; }catch(Exception $e){ error_log($e->getMessage()); return false; } } public static function assertIdent($s){ return is_string($s) && preg_match('/^[a-zA-Z0-9_]+$/', $s); } }