Avatar billede ralf_l Nybegynder
15. september 2013 - 01:19 Der er 6 kommentarer og
1 løsning

Søger MySQLi alternativ til PDO fetchAll i MVC

Jeg ved ikke om det er skrevet under den rigtige kategori, men here i go..

Jeg er ved at prøve at lave en brugerlist.

Jeg har set det lavet med PDO fetchAll.
Men da jeg ellers har arbejdet med MySQLi, og er fint tilfreds med det, vil jeg gerne finde et MySQLi alternativ til følgende:

I Modellen har PDO versione følgende:
function userList()[
$stmt->db->prepare('SELECT id,username FROM users');
$stmt->execute();
return $stmt->fetchAll
}

Og i viewer er der:
print_r($this->userList);

Det virker fint, med PDO...
Men jeg har prøvet med flere MySQLi funktioner.
Og der får jeg konstant følgende fejl:

Call to undefined method mysqli_stmt::

efterfulgt af de mysqli metoder jeg har prøvet..
Og jeg har søgt google tynd efter mulige alternativer, men intet er lykkes.

Så spørgsmålet er: Hvordan kan jeg sende mine data ud på viewer-siden i array, ligesom det gøres i PDO?

På forhånd tak for hjælpen.
Avatar billede repox Seniormester
15. september 2013 - 01:29 #1
mysqli_stmt er jo også en klasse og ikke en metode?

Hvor er resten af dit forsøg?
Avatar billede ralf_l Nybegynder
15. september 2013 - 01:50 #2
Hovsa taste fik ikke skrevet rigtigt af :)
Det er sådanset bare denne del der skal omskrives:

$stmt = $this->db->prepare('SELECT id,username FROM users');
$stmt->execute();
return $stmt->fetchAll();


Men hvis du vil se hele forløbet har jeg det her (håber det bliver til at læse:

------------------------

Jeg har en database.php i en config mappe:
    define('DB_HOST', 'localhost');
    define('DB_NAME', 'leg');
    define('DB_USER', 'root');
    define('DB_PASS', '');


------------------------


Så har jeg en inc mappe hvor jeg har funktionen:
    class Database extends mysqli
    {
        public function __construct()
        {
                parent::__construct(DB_HOST,DB_USER,DB_PASS,DB_NAME);
        }
    }


------------------------


Så har jeg en "main" Model.php fil i inc:
    class Model {
        function __construct() {
            $this->db = new Database();
        }
    }


------------------------

Så her jeg min user_model.php hvor listen skal kaldes:

    class User_Model extends Model {
        public function __construct() {
                parent::__construct();
        }
           
            public function userList(){
                  $stmt = $this->db->prepare('SELECT id,username FROM users');
                  $stmt->execute();
                  return $stmt->fetchAll();
            }
}

------------------------

Så har en en controller for user:

    public function index()
    {   
            $this->view->userList = $this->model->userList();
    }

------------------------

Så har jeg siden hvor i listen gerne skulle kommer:

echo $this->userList;


------------------------

Det var de filer der lige har med userlist at gøre
Avatar billede arne_v Ekspert
15. september 2013 - 02:37 #3
Hvis jeg har forstaaet det rigtigt, saa skal:

$stmt = $this->db->prepare('SELECT id,username FROM users');
$stmt->execute();
return $stmt->fetchAll();

erstattes med:

$stmt = $this->db->prepare('SELECT id,username FROM users');
$stmt->execute();
$result = $stmt->get_result();
return $result->fetch_all();
Avatar billede ralf_l Nybegynder
15. september 2013 - 02:49 #4
Der er ikke et øje tørt Arne.. :)
Mange tak, og smid endelig endelig et svar :)
Avatar billede arne_v Ekspert
15. september 2013 - 02:56 #5
det var nok?

og svar
Avatar billede ralf_l Nybegynder
15. september 2013 - 03:22 #6
Ja, havde ikke tænkt på at $stmt->get_result(); skulle i en variabel.
Men det er da positivt, for det var det jeg prøvede, så var inde på noget af det rigtige :)
Avatar billede arne_v Ekspert
15. september 2013 - 04:31 #7
Hvis du bruger en nyere PHP kan du:

$stmt = $this->db->prepare('SELECT id,username FROM users');
$stmt->execute();
return $stmt->get_result()->fetch_all();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester