PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB` PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $this->connection = new PDO($dsn, DB_USER, DB_PASS, $options); } catch (PDOException $e) { if (DEBUG_MODE) { die("Veritabanı bağlantı hatası: " . $e->getMessage()); } else { die("Veritabanı bağlantı hatası!"); } } } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } public function getConnection() { return $this->connection; } // Query helper metodları public function query($sql, $params = []) { try { $stmt = $this->connection->prepare($sql); // Parametreleri bind et if (!empty($params)) { // Named parametreler (associative array) if (array_keys($params) !== range(0, count($params) - 1)) { foreach ($params as $key => $value) { $paramName = ':' . ltrim($key, ':'); $stmt->bindValue($paramName, $value); } } else { // Positional parametreler (indexed array) $stmt->execute($params); return $stmt; } } $stmt->execute(); return $stmt; } catch (PDOException $e) { if (DEBUG_MODE) { die("Query hatası: " . $e->getMessage() . "
SQL: " . $sql . "
Params: " . print_r($params, true)); } return false; } } public function fetchAll($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt ? $stmt->fetchAll() : []; } public function fetchOne($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt ? $stmt->fetch() : null; } public function insert($table, $data) { $fields = implode(', ', array_keys($data)); $placeholders = ':' . implode(', :', array_keys($data)); $sql = "INSERT INTO {$table} ({$fields}) VALUES ({$placeholders})"; $this->query($sql, $data); return $this->connection->lastInsertId(); } public function update($table, $data, $where, $whereParams = []) { $set = []; $params = []; // SET kısmı için named parametreler foreach ($data as $key => $value) { $setKey = "set_" . $key; $set[] = "{$key} = :{$setKey}"; $params[$setKey] = $value; } $set = implode(', ', $set); // WHERE kısmı için named parametreler (positional ? yerine) $whereSql = $where; if (!empty($whereParams)) { $paramIndex = 0; $whereSql = preg_replace_callback('/\?/', function() use (&$paramIndex, &$params, $whereParams) { $paramName = "where_param_" . $paramIndex; $params[$paramName] = $whereParams[$paramIndex]; $paramIndex++; return ":{$paramName}"; }, $where); } $sql = "UPDATE {$table} SET {$set} WHERE {$whereSql}"; return $this->query($sql, $params); } public function delete($table, $where, $params = []) { // WHERE kısmı için named parametreler (positional ? yerine) $whereSql = $where; $namedParams = []; if (!empty($params) && strpos($where, '?') !== false) { $paramIndex = 0; $whereSql = preg_replace_callback('/\?/', function() use (&$paramIndex, &$namedParams, $params) { $paramName = "where_param_" . $paramIndex; $namedParams[$paramName] = $params[$paramIndex]; $paramIndex++; return ":{$paramName}"; }, $where); $params = $namedParams; } $sql = "DELETE FROM {$table} WHERE {$whereSql}"; return $this->query($sql, $params); } }