<?php /* Task 2: Implement db handler Create database `adb2` and user `root` with pasword `` for your project; Create file ./lib/db.php and implement in it abstract class MjDb that extends MjSingleton; Class should use config from clas Config. Class MjDb should implements methods: Public > execute(string $query) (function that execute query and return true or return false in case failure) > get_row(string $query) (function that execute query and returns row from database or return false in case failure) > execute_s(string $query) (function that execute query and returns array of rows from database or return false in case failure) */ include('./data/config.php'); include('./lib/singleton.php'); include('./lib/db.php'); class task2 extends MjDb{ public function run(){ $q = " CREATE TABLE IF NOT EXISTS `a_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `pass` varchar(50) DEFAULT NULL, `salt` varchar(50) DEFAULT NULL, `type` TINYINT DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=1;"; if(!$this->execute($q)){ return __LINE__; } $q = "TRUNCATE a_user"; if(!$this->execute($q)){ return __LINE__; } $q = " INSERT INTO `a_user` ( `id` , `name` , `pass` , `salt` ) VALUES ( NULL , 'name', 'pass', 'salt' ); "; for($i=0;$i<5;$i++){ if(!$this->execute($q)){ return __LINE__; } } $q = "SELECT * FROM `a_user`"; $r = $this->get_row($q); return __LINE__; } $r = $this->execute_s($q); return __LINE__; } return null; } } $error = task2::get_instance()->run(); if($error == null){ }else{ }
Pomijając wszystkie szczegóły klas zastanawia mnie jedna rzecz:
Ten fragment kodu
FOR($i=0;$i<5;$i++){ IF(!$this->execute($q)){ RETURN __LINE__; } }
utworzy mi w bazie 5 identycznych rekordów .
Następnie mamy:
$q = "SELECT * FROM `a_user`"; $r = $this->get_row($q); return __LINE__; }
Która to metoda zwracać będzie ilość wierszy w bazie (skoro wcześniej utworzyło mi 5 rekordów w bazie to wywali mi error __LINE__ bo jest 5 wierszy)
$r = $this->execute_s($q); return __LINE__; }
Tutaj się zgodzę bo metoda zwróci mi tablice z 5 rekordami.
Dlatego się zastanawiam czy bodajże nie ma tu haczyka jakiegoś czy to po prostu jakiś błąd ?