2016-07-12 17 views
-1

Ich habe einige Probleme mit meiner SQL-Anweisung in meiner Datenbank suchen. Ich brauche dies, um spezifisch nach der eingegebenen Phrase zu suchen, z. Sky-Box wird nur Sky-Box und nicht Sky-Box-Green zurückgeben, was es gerade ist. Der Fehler, den ich bekommen und der Code kann unten gesehen werden:Syntax-Problem mit SQL-Code ein bestimmtes Wort auswählen

Code:

$term = "searchTerm"; 
    SELECT * FROM `0530-0605` WHERE SearchTerm = [[:<:]]:searchTerm[[:>:]] UNION ALL SELECT * FROM `0606-0612` WHERE SearchTerm = [[:<:]]:searchTerm[[:>:]] UNION ALL SELECT * FROM `0613-0619` WHERE SearchTerm = [[:<:]]:searchTerm[[:>:]] UNION ALL SELECT * FROM `0620-0626` WHERE SearchTerm = [[:<:]]:searchTerm[[:>:]] UNION ALL SELECT * FROM `0627-0703` WHERE SearchTerm = [[:<:]]:searchTerm[[:>:]] 

$stmt = $conn->prepare($sql); 
$stmt->bindParam(":searchTerm", $term); 
$stmt->execute(); 
foreach($stmt as $row) { 
    $file = $row['SearchTerm']; 
} 

Fehler:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 '[[:<:]]'sky-box-not-working'[[:>:]] UNION ALL SELECT * FROM 0606-0612 WHERE Se'

Nicht wirklich sicher, wie man damit umgehen, wie Untersuchungen zeigten, dass [[: < :]] term [[:>:]]] war der Weg zu erreichen, was ich will, aber es funktioniert eindeutig nicht

+4

Ich habe das Gefühl, dass dieses Schema erschreckend ist. – Drew

+1

Ist dies MySQL oder Microsoft SQL Server? – tadman

+0

Mysql ist was ich benutze –

Antwort

0

Ich bin mir nicht sicher, welche Forschung führte Sie, um dies zu verwenden: [[:<:]]:searchTerm[[:>:]], aber es tut nicht t scheint gültige MySQL-Syntax zu sein.

Mit PDO müssen Sie nur Platzhalter in der SQL-Abfrage hinzufügen, z. Verwenden Sie :searchTerm und binden Sie anschließend die Parameter mit bindParam(), siehe folgendes Beispiel.

finden Sie im Handbuch hier: http://php.net/manual/en/pdostatement.bindparam.php

auf Code-Basis:

$term = "searchTerm"; 
$sql = " 
    SELECT * FROM `0530-0605` WHERE SearchTerm = :searchTerm 
     UNION ALL 
    SELECT * FROM `0606-0612` WHERE SearchTerm = :searchTerm 
     UNION ALL 
    SELECT * FROM `0613-0619` WHERE SearchTerm = :searchTerm 
     UNION ALL 
    SELECT * FROM `0620-0626` WHERE SearchTerm = :searchTerm 
     UNION ALL 
    SELECT * FROM `0627-0703` WHERE SearchTerm = :searchTerm"; 

$stmt = $conn->prepare($sql); 
$stmt->bindParam(":searchTerm", $term); 
$stmt->execute(); 
foreach($stmt as $row) { 
    echo '<pre>'. print_r($row, true).'</pre>'; 
} 
+0

Warum sollte das OP dies "versuchen"? Eine *** gute Antwort *** wird immer eine Erklärung haben, was getan wurde und warum es so gemacht wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

+0

Sicher, der Rest ist in den Kommentaren, wird aktualisiert – ajmedway

+0

Nicht funktioniert, gibt immer noch Ergebnisse, die nur die searchTerm anstelle einer genauen Übereinstimmung enthalten –

0

aktualisiert Antwort, basierend auf dem neuen Code durch den OP geliefert:

$term = "searchTerm"; 
$query = "SELECT * FROM `0530-0605` WHERE SearchTerm = :searchTerm 
UNION ALL 
SELECT * FROM `0606-0612` WHERE SearchTerm = :searchTerm 
UNION ALL 
SELECT * FROM `0613-0619` WHERE SearchTerm = :searchTerm 
UNION ALL 
SELECT * FROM `0620-0626` WHERE SearchTerm = :searchTerm 
UNION ALL 
SELECT * FROM `0627-0703` WHERE SearchTerm = :searchTerm"; 

$stmt = $conn->prepare($sql); 
$stmt->bindParam(":searchTerm", $term); 
$stmt->execute(); 
foreach($stmt as $row) { 
    $file = $row['SearchTerm']; 
} 

dass Denken Sie daran, bei der Verwendung von PDO mit Platzhaltern, gibt es keine Notwendigkeit, den Werten zu entkommen (wie es mit mysqli notwendig wäre): PDO handhabt das für Sie.

+0

nein, wir haben festgestellt, dass [[: <:]]: searchTerm [[:>:]] ist die falsche Art der Suche nach der genauen Übereinstimmung eines searchTerm –

+0

Nicht funktioniert , gibt immer noch Ergebnisse zurück, die nur die searchTerm enthalten, anstatt eine exakte Übereinstimmung. –

+0

Gleich ist eine exakte Übereinstimmung ... – Jocelyn

Verwandte Themen