bekomme Ergebnisse nicht ganz korr. angezeigt

rernanded

Erfahrenes Mitglied
Hi
nachstehendes Script arbeitet nicht ganz korrekt. Gebe ich 2 Suchworte ein so bekomme ich 2 Ergebnislisten untereinander angezeigt. Die erste(obere) Liste enthält Ergebnisse mit dem ersten Suchwort, die zweite(untere) Liste enthält Ergebnisse mit dem zweiten Suchwort.
ich will aber die Ergebnisse in denen beide Suchworte gleichzeitig enthalten sind.
MONI


PHP:
<?php
if (strlen(trim($_POST['search'])) < 3)
	echo "Bitte mind. drei Zeichen eingeben";
else {
	include_once('suche_connection.php');
	
	$search = explode(" ",$_POST["search"]);
	
	try {
		$pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $username, $password);
	}
	catch(PDOException $e) {
		echo $e->getMessage();
	}
	$count = count($search);
	for ($i=0; $i < $count; $i++) {
		
		$stmt = $pdo->prepare("SELECT * FROM onlinebooks WHERE url LIKE ? ORDER BY id LIMIT 0,100");
		$stmt->bindValue(1, '%' .$search[$i]. '%', PDO::PARAM_STR);
		$stmt->execute();
		
		$result = $stmt->fetchAll();

 		foreach ($result as $row) {
			echo $row["url"]."<br />";
		}
	}
}
?>
 
Naja, was erwartest du, wenn du das Array durchschleifst
und für jedes Wort eine Abfrage startest...

Bau eine einzelne Abfrage zusammen, bei der je nach Wortanzahl mehrere Where-Teile kommen.
 
Naja, was erwartest du, wenn du das Array durchschleifst
und für jedes Wort eine Abfrage startest...

Bau eine einzelne Abfrage zusammen, bei der je nach Wortanzahl mehrere Where-Teile kommen.

Hi
dachte ich mir und habe auch ein Script wo es so geht. Das ist aber kein PDO mit prepare etc. Dazu hab ich keine Idee wie mans macht?!.

MONI

Auszug:
PHP:
...
$abfrage = "SELECT * FROM onlinebooks WHERE";
    $count = count($search);
    for($i=0; $i < $count; $i++){
        $abfrage.="((url LIKE '%".mysql_real_escape_string($search[$i])."%') OR (id LIKE '%".mysql_real_escape_string($search[$i])."%')";
        if ($i<($count-1))
            $abfrage.=") AND ";
    }
    $abfrage.=") ORDER BY id LIMIT 0,100";
...
 
PHP:
<?php
$search = explode(" ", $_POST["search"]);
foreach ($search as $k => $v) {
	if (strlen(trim($v)) < 3)
		unset($search[$k]);
}
$count = count($search);

if ($count < 1)
	echo "Bitte mindestens ein Wort mit mehr als zwei Buchstaben eingeben";
else {
	include_once('suche_connection.php');
	try {
		$pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname", $username, $password);
	}
	catch(PDOException $e) {
		echo $e->getMessage();
	}

	$stmtstr = "SELECT * FROM onlinebooks";
	$first = true;
	foreach ($search as $v) {
		if($first) {
			$stmtstr .= " WHERE";
			$first = false;
		}
		else
			$stmtstr .= " AND";
		$stmtstr .= "url LIKE ?";
	}
	$stmtstr .= " LIMIT 0,100";

	$stmt = $pdo->prepare($stmtstr);
	$i = 0;
	foreach ($search as $v)
		$stmt->bindValue(++$i, '%' .$v. '%', PDO::PARAM_STR);

	$stmt->execute();
	$result = $stmt->fetchAll();
	foreach ($result as $row) {
		echo $row["url"]."<br />";
	}
}
?>
Vermutung: Nicht der gesamte String, sondern jedes Suchwort muss mindestens drei Buchstaben haben.
Code ist entsprechend gemacht.

Exceptionmeldungen direkt rausschreiben ist nicht ratsam.
Bei den DB-Sachen ist nur teilweise Fehlerprüfung drin.
 
Vermutung: Nicht der gesamte String, sondern jedes Suchwort muss mindestens drei Buchstaben haben.
Code ist entsprechend gemacht.

Exceptionmeldungen direkt rausschreiben ist nicht ratsam.
Bei den DB-Sachen ist nur teilweise Fehlerprüfung drin.



Danke Dir. MONI
 
Zurück