Gå til innhold

PDO - num rows


Anbefalte innlegg

Videoannonse
Annonse

			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

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
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

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

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 av Thomas.
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...