Thomas. Skrevet 29. januar 2010 Del Skrevet 29. januar 2010 Hei, finnes det en PDO-funksjon som er lik mysql_num_rows() funksjonen? Lenke til kommentar
Alex Moran Skrevet 29. januar 2010 Del Skrevet 29. januar 2010 Ikke annet enn pdo->query("SELECT FOUND_ROWS()") Lenke til kommentar
Thomas. Skrevet 30. januar 2010 Forfatter Del Skrevet 30. januar 2010 public function dbAntallRows ( ) { $this->con(); $rows = $this->db->prepare ( 'SELECT found_rows() AS rows', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true) ); $rows->execute(); $rowsAntall = $rows->fetch(PDO::FETCH_OBJ)->rows; $rows->closeCursor(); return $rowsAntall; } Printer den ut antall rows av forrige spørring? (return $this->db->query($sql);) Så jeg kan fint ha mange etterhverandre? Lenke til kommentar
Ernie Skrevet 30. januar 2010 Del Skrevet 30. januar 2010 Ikke annet enn pdo->query("SELECT FOUND_ROWS()") Ehh ... jo? Lenke til kommentar
Alex Moran Skrevet 30. januar 2010 Del Skrevet 30. januar 2010 Ehm, nei? For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action. Lenke til kommentar
Ernie Skrevet 30. januar 2010 Del Skrevet 30. januar 2010 ... og det skal da bety at det ikke fungerer med MySQL? Det fungerer iallfall her. Lenke til kommentar
Thomas. Skrevet 30. januar 2010 Forfatter Del Skrevet 30. januar 2010 Printer den ut antall rows av forrige spørring? (return $this->db->query($sql);)Så jeg kan fint ha mange etterhverandre? Lenke til kommentar
Thomas. Skrevet 30. januar 2010 Forfatter Del Skrevet 30. januar 2010 Og, kan man ikke bruke mysql_real_escape_string med PDO ? Lenke til kommentar
Ernie Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 Jo, men det blir helt unødvendig hvis/når man bruker «prepared statements». Uannsett har man PDO->quote, så mysql_real_escape_string er helt unødvendig å bruke når man benytter PDO. Lenke til kommentar
Thomas. Skrevet 31. januar 2010 Forfatter Del Skrevet 31. januar 2010 Jo, men det blir helt unødvendig hvis/når man bruker «prepared statements». Uannsett har man PDO->quote, så mysql_real_escape_string er helt unødvendig å bruke når man benytter PDO. Hvordan skal dette løses da? Må jeg validere all input med preg_match eller lignende?? Jeg skriver ' i inputen. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' Kode: public function QuerySelect ( $sql ) { try { $this->con(); return $this->db->query($sql); } catch ( Exception $error ) { echo 'Det oppsto en feil ved henting av data fra databasen! Venligst rapporter dette til admin!'; echo var_dump($this->db->query($sql)); die(); } } $mottaker = $_POST['mottaker']; $sjekk_bruker = $data->QuerySelect('SELECT * FROM ' . TABELL_BRUKERE . ' WHERE nick = \'' . $mottaker . '\''); Lenke til kommentar
Ernie Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 Hvis du leser innlegget mitt en gang til sier jeg at du enten må bruke «prepared statements» eller PDO->quote. Ut fra koden gjør du vel ingen av delene. Lenke til kommentar
AlecTBM Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 Får jeg spørre hvorfor du lager en egen klasse for å kjøre SQL spørringer? Er jo det PDO gjør for deg. Ang rowCount så står det at for de fleste databasene så returnerer den ikke antall rader Om dette gjelder i MySQL vet jeg ikke siden det begynner å bli en god stund siden jeg har brukt MySQL database (før jeg begynte med PDO), nå bruker jeg SQLite3 der rowCount ikke returnerer på SELECT, og derfor bruker jeg den ikke. For å bruke "prepared statements" så blir det noe ala dette: $pre = $PDO->prepare("SELECT * FROM ". TABELL_BRUKERE ." WHERE nick=:nick"); $pre->execute(array(':nick' => $mottaker)); print_r($pre->fetchAll()); Dette var et kjapt eksempel. Var litt usikker på om man kunne bruke parametere på tabell navn, så gjorde det slik (er jo tross alt en konstant) Lenke til kommentar
Thomas. Skrevet 31. januar 2010 Forfatter Del Skrevet 31. januar 2010 (endret) Så, jeg kan ikke kjøre noe prepare() før query() i funksjonen? Hvis du leser innlegget mitt en gang til sier jeg at du enten må bruke «prepared statements» eller PDO->quote. Ut fra koden gjør du vel ingen av delene. Når jeg prøver det (quote), får jeg: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'''' Mulig jeg gjør det helt feil, da? $sjekk_bruker = $data->QuerySelect('SELECT * FROM ' . TABELL_BRUKERE . ' WHERE nick = \'' . $data->db->quote($mottaker) . '\''); Endret 31. januar 2010 av Thomas. Lenke til kommentar
AlecTBM Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 Les posten MIN også en gang til Lenke til kommentar
Thomas. Skrevet 31. januar 2010 Forfatter Del Skrevet 31. januar 2010 Les posten MIN også en gang til Man kan ikke bruke prepare før query? Kun execute? Lenke til kommentar
AlecTBM Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 man skal ikke bruke query Eksemplet mitt returnerer alle treff Lenke til kommentar
Ernie Skrevet 31. januar 2010 Del Skrevet 31. januar 2010 Så, jeg kan ikke kjøre noe prepare() før query() i funksjonen? Hvis du leser innlegget mitt en gang til sier jeg at du enten må bruke «prepared statements» eller PDO->quote. Ut fra koden gjør du vel ingen av delene. Når jeg prøver det (quote), får jeg: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'''' Mulig jeg gjør det helt feil, da? $sjekk_bruker = $data->QuerySelect('SELECT * FROM ' . TABELL_BRUKERE . ' WHERE nick = \'' . $data->db->quote($mottaker) . '\''); Du må droppe ' ' rundt verdiene du setter inn. Quote fikser det for deg hvis nødvendig. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå