Witam . Mam takie zadanie:
<?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);
if(!$r || count($r) != 4
){ return __LINE__;
}
$r = $this->execute_s($q);
if(!$r || count($r) != 5
){ return __LINE__;
}
return null;
}
}
$error = task2::get_instance()->run();
if($error == null){
}else{
echo 'Test Failed on line '.$error; }
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);
if(!$r || count($r) != 4
){ 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);
if(!$r || count($r) != 5
){ 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 ?