Filtrowanie listy z bazy danych

0

Witam, jestem w trakcie zmiany zapytań do bazy danych z mysqli na pdo.
Działając na mysqli miałem zapytanie, które filtrowało mi numery rejestracyjne pojazdów z bazy danych, a wyglądało następująco:

<?php
	echo ''; 
	if( !isset($_GET['auto']) ){
		echo '';
	}
	echo '';
	$alpha_sql = "select DISTINCT LEFT(autorej , 10) as firstCharacter,( select count(*) from samochody where LEFT(autorej , 10)= firstCharacter ) 
	AS counter from samochody order by autorej asc";
	$result_alpha = mysqli_query($mysqli,$alpha_sql);
	while($row_alpha = mysqli_fetch_array($result_alpha) ){
		$firstCharacter = $row_alpha['firstCharacter'];
		$counter = $row_alpha['counter'];
		echo '<a href="index.php?auto='.$firstCharacter.'" class="przycisk2"'; 
		if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
			echo '';
		}
		echo ' >'.$firstCharacter.' ('.$counter.')</a>';
	}
?>

W jaki sposób mogę przerobić to na PDO ?

$pdo_statement = $dbh->prepare("");
					$pdo_statement->execute();
					$result = $pdo_statement->fetchAll();
0

MySQLi oraz PDO są tylko sterownikami umożliwiającymi łączenie się z bazą danych - zmiana jednego na drugie nie wymaga modyfikacji składni zapytań.

0

Poradziłem sobie z PDO, potrzebuję jeszcze pomocy w kwestii dostosowania wyszukiwarki na podstawie pobranego rekordu.
Na MYSQLI skrypt wyświetlający dane z bazy danych wyglądał tak:

<?php
							$sql = "SELECT * FROM samochody where 1";
							if( isset($_GET['auto']) ){
								$sql .= " and LEFT(autorej,20)='".$_GET['auto']."' ";
							}
							$sql .=" ORDER BY id DESC";
							$result = mysqli_query($mysqli,$sql);
							$sno = 1;
							while($wynik = mysqli_fetch_array($result)){
								$id = $wynik['id'];
								$autodata = $wynik['autodata'];
								$autorej = $wynik['autorej'];
								$autonaprawa = $wynik['autonaprawa'];
								$autoprzebieg = $wynik['autoprzebieg'];
								$autouwagi = $wynik['autouwagi']
							?>

Filtr na MYsQLI:

<?php
	echo ''; 
	if( !isset($_GET['auto']) ){
		echo '';
	}
	echo '';
	$alpha_sql = "select DISTINCT LEFT(autorej , 10) as firstCharacter,( select count(*) from samochody where LEFT(autorej , 10)= firstCharacter ) 
	AS counter from samochody order by autorej asc";
	$result_alpha = mysqli_query($mysqli,$alpha_sql);
	while($row_alpha = mysqli_fetch_array($result_alpha) ){
		$firstCharacter = $row_alpha['firstCharacter'];
		$counter = $row_alpha['counter'];
		echo '<a href="index.php?auto='.$firstCharacter.'" class="przycisk2"'; 
		if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
			echo '';
		}
		echo ' >'.$firstCharacter.' ('.$counter.')</a>';
	}
?>

Na PDO dane pobieram tak:

<?php	
					$pdo_statement = $dbh->prepare("SELECT * FROM samochody ORDER BY id DESC");
					$pdo_statement->execute();
					$result = $pdo_statement->fetchAll();
				?>

A filtr na PDO wygląda tak:

<?php
	echo ''; 
	if( !isset($_GET['auto']) ){
		echo '';
	}
	echo '';
	$pdo_statement = $dbh->prepare("select DISTINCT LEFT(autorej , 10) as firstCharacter,( select count(*) from samochody where LEFT(autorej , 10)= firstCharacter ) AS counter from samochody order by autorej DESC");
	$pdo_statement->execute();
	while($row_alpha = $pdo_statement->fetch(PDO::FETCH_ASSOC) ){
		$firstCharacter = $row_alpha['firstCharacter'];
		$counter = $row_alpha['counter'];
		echo '<a href="index.php?auto='.$firstCharacter.'" class="przycisk2"'; 
		if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
			echo '';
		}
		echo ' >'.$firstCharacter.' ('.$counter.')</a>';
	}
?>

Po przejściu na PDO działa tak jak na mysqli z wyjątkiem odnośnika do wyświetlenia szukanego rekordu, po kliknięciu przenosi niby do podstrony index.php?auto=numer_rejestracyjny ale nie filtruje.

0

Ktoś jest w stanie pomóc ?

0

Który fragment miałby odpowiadać za filtrowanie?

 if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
            echo '';
}
echo ' >'.$firstCharacter.' ('.$counter.')</a>';

Ten if jest całkowicie bezsensu, chyba.

Nie miałeś na myśli przypadkiem:

 if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
           echo ' >'.$firstCharacter.' ('.$counter.')</a>';
}

?

0

Może też być i tak, ale w jaki sposób mam to zrobić żeby działało na PDO ?
plik filtr.php jest includowany do index.php, i w filtrze znajduje się zapytanie do bazy z wyświetleniem unikalnych rekordów z policzeniem wpisów, a w pliku index.php jest zapytanie, które zrzuca bazę dane.

0
Piotrek Nero napisał(a):

Który fragment miałby odpowiadać za filtrowanie?

 if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
            echo '';
}
echo ' >'.$firstCharacter.' ('.$counter.')</a>';

Ten if jest całkowicie bezsensu, chyba.

Nie miałeś na myśli przypadkiem:

 if( isset($_GET['auto']) && $firstCharacter == $_GET['auto'] ){
           echo ' >'.$firstCharacter.' ('.$counter.')</a>';
}

?

To może inaczej w jaki sposób przerobić to zapytanie:

<?php
							$sql = "SELECT * FROM samochody where 1";
							if( isset($_GET['auto']) ){
								$sql .= " and LEFT(autorej,20)='".$_GET['auto']."' ";
							}
							$sql .= " ORDER BY id DESC";
							$result = mysqli_query($mysqli,$sql);
							while($wynik = mysqli_fetch_array($result)){
								$id = $wynik['id'];
								$autodata = $wynik['autodata'];
								$autorej = $wynik['autorej'];
								$autonaprawa = $wynik['autonaprawa'];
								$autoprzebieg = $wynik['autoprzebieg'];
								$autouwagi = $wynik['autouwagi']
							?>

na PDO, gdzie obecne pobieranie danych zrobiłem w ten sposób:

<?php	
					$pdo_statement = $dbh->prepare("SELECT * FROM samochody ORDER BY id DESC");
					$pdo_statement->execute();
					$result = $pdo_statement->fetchAll();
				?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1