Generowanie zapytania do SQL z pętli

0

Witajcie. Chciałem prosić o sugestie odnośnie takiego problemu:

function pobierz_tab_obiekty($tablica){
		$obiekty=array();
//Generowanie string dla zapytania query()
		$tresc='"SELECT*FROM obiekty WHERE ';
		for($x=0;$x<count($tablica);$x++){
			$tresc.='kategoria='.$tablica[$x];
			if($x<count($tablica)-1){
				$tresc.=' OR ';
			}
			else{
				$tresc.='"';
			}
		}
		echo $tresc;//Kontrola stringa
//Wywołanie zapytania
		$lacz=$this->lacz_db();
		$zapytanie=$lacz->query($tresc);
		if(!$zapytanie){
			echo 'Nie udało się wykonac zapytanie pobierz_tab_obiekty()';//
		}
		else{
			if($zapytanie->num_rows >0){ 
				while($r = $zapytanie->fetch_assoc()){
					$obiekty[count($obiekty)]=$r;
				}
			}
		}
		return $obiekty;		
	}
echo $tresc;

wyświetla

"SELECT*FROM obiekty WHERE kategoria=9 OR kategoria=10 OR kategoria=11"

A funkcja zwraca:
Nie udało się wykonac zapytanie pobierz_tab_obiekty()Array ( )

Dodam jeszcze że jeżeli po prostu wysyłam zapytanie

$zapytanie=$lacz->query("SELECT*FROM obiekty WHERE kategoria=9 OR kategoria=10 OR kategoria=11");

To wszystko jest ok i skrypt działa

0
select * from obiekty where kategoria '.implode($tablica, ",").'

tak nie lepiej?

0

Warto pamiętać o SQL injection. Później ktoś zmieni, że kategorie pochodzą od usera, a nie są podane przez programistę i dziura gotowa..

$ids     = array(1, 2, 3, 7, 8, 9);
$inQuery = implode(',', array_fill(0, count($ids), '?'));

$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(' . $inQuery . ')'
);

// bindvalue is 1-indexed, so $k+1
foreach ($ids as $k => $id)
    $stmt->bindValue(($k+1), $id);

$stmt->execute();
0

wyświetla

"SELECT*FROM obiekty WHERE kategoria=9 OR kategoria=10 OR kategoria=11"

A funkcja zwraca:
Nie udało się wykonac zapytanie pobierz_tab_obiekty()Array ( )

Widziałeś kiedyś zapytanie zaczynające się od cudzysłowu?

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