2017-02-03 4 views
-1

Warum dieser CodeMulti Wortsuche doesnt zeigen Array in PHP

$varTerm = explode(" ", $nomer); 
    $termsStringArray = array(); 
    $termsArray = array(); 
    foreach($varTerm as $term){ 
     $term = trim($term); 
     if(!empty($term)) { 
      array_push($termsStringArray, "adrs LIKE ? "); 
      array_push($termsArray, $term); 
      array_push($termsArray, $term); // note, you can do this part differently, if you'd like 
     } 
    } 
    $implodedTermsString = implode('AND ', $termsStringArray); 
    //echo $implodedTermsString; 
    print_r($termsArray); 
$sth = $pdo->prepare("SELECT * 
FROM sms_addrs WHERE ". $implodedTermsString); 
var_dump($sth); 
$sth->execute($termsArray); 
var_dump($sth); 

Zeigt diese Ausgabe:

Array ([0] => shell [1] => shell [2] => Compans [3] => Compans) 

object(PDOStatement)#2 (1) { ["queryString"]=> string(61) "SELECT * FROM sms_addrs WHERE adrs LIKE ? AND adrs LIKE ? " } 

Ich meine, warum ich in Worten nicht sehen? Marken?

Wenn ich direkte Worte wie hier:

$sth->execute(array("%shell%","%Compans%")); 

i die gewünschte Ausgabe in Reihen erhalten.

+0

Weil Sie anfangen müssen, Handbücher zu lesen. Es gibt so etwas wie die dort beschriebenen 'fetch_'-Funktionen. –

+0

'warum ich nicht ...' Die Vorbereitung. statisch. [queryString] wird unverändert an den SQL-Server gesendet. Bei jedem Aufruf von $ sth-> execute ($ termsArray); können Sie die Werte vor dem Aufruf ändern. Dann werden nur die Werte an mysql gesendet, weil die Abfrage immer noch da ist. So ist prep.statm. Arbeit und größte Nutzen ist die Wiederverwendung einer QUERY. – JustOnUnderMillions

+0

Ich möchte, dass die Suchbegriffe in vorbereiteten Anweisungen stehen, die in der Abfrage getrennt sind. – Nasko

Antwort

0

Ich fand einen funktionierenden Code:

$search = strtoupper($nomer); 
$search = strip_tags($search); 
$search = trim($search); 
$words = explode(' ', $search); 
$words_condition = array(); 
$arguments = array(); 
foreach ($words as $word) { 
     $words_condition[] = 'adrs LIKE ?'; 
     $arguments[] = '%'.$word.'%'; 
} 

$sth = $pdo->prepare('SELECT * FROM sms_addrs WHERE '.implode(' AND ',$words_condition)); 
$sth->execute($arguments); 

Mein Problem soved ist! Danke euch allen!