2009-05-22 9 views
0

ich derzeit versuche, Daten von MYSQL zu ziehen mit PHP und ich immer die folgende Fehlermeldung erhalten:Problem mit SQL-Anweisung mit PHP

„Es konnte keine Datensätze abrufen: Sie haben einen Fehler in der SQL-Syntax; Scheck das Handbuch, das für die richtige Syntax zu Ihrem MySQL-Server-Version entspricht bei '% PC4198% OR LIKE% Fluke% oEM' zu verwenden, in Zeile 1 "

My SQL-Anweisung lautet wie folgt:

$sql = "SELECT * FROM account WHERE `NSC ID` LIKE %".$nscid."% OR oem LIKE %".$oem."%"; 

Jede Hilfe wird sehr geschätzt ed.

Antwort

10

sollten Ihre Strings angegeben werden:

$sql = "SELECT * FROM account WHERE NSC ID LIKE '%".$nscid."%' OR oem LIKE '%".$oem."%'"; 

Das heißt, sollten Sie wirklich in Betracht ziehen PDO oder ein ORM verwenden.

Edit:

Der wichtigste Punkt der Verwendung von PDO ist, als Bill sagte, SQL-Injection (verursacht durch möglicherweise verschmutzt Strings in SQL verketten) zu verhindern.

Die gleiche Abfrage, in PDO Stil würde sein:

$query = $connection->prepare('SELECT * FROM account WHERE NSCID LIKE :nscid OR oem LIKE :orm'); 
$query->bindValue(':nscid', '%'.$nscid.'%', PDO::PARAM_STR); 
$query->bindValue(':oem', '%'.$oem.'%', PDO::PARAM_STR); 

Es ist etwas mehr Code, aber es wird Sie von den meisten schützen (alle?) SQL-Injektionen, durch die Bibliothek lassen die entweichenden tun.

(Die Parametertypen für bindValue optional sind, aber gute Praxis.)

+0

+1 für letzten hilfreich Satz – alex

+1

wäre es hilfreich sein, zu erklären, wie diese Schnittstellen in Joshs ca helfen würden, se. Sein Fehler war einfach ein Fehler beim Abgrenzen eines String-Literals in Anführungszeichen. Möglicherweise erwarten Sie SQL Injection-Probleme aufgrund seiner Interpolation von PHP-Variablen in die SQL-Zeichenfolge, aber es ist nicht klar aus Ihrer Antwort. –

+0

Danke an euch beide! Das hat funktioniert!!! –

1

sogar noch besser, die Operatoren {und} können Sie erlauben diese

$sql="SELECT * FROM account WHERE NSC ID Like '%{$nscid}%' OR oem LIKE '%{$oem}%'"; 

Sie das nicht tun müssen, {} wenn es ein einzelne var so, aber wenn Sie ein Objekt verwenden Sie sie brauchen:

$hi_example="yarg i am a {$person->type}"; 
+0

Danke an euch beide! Das hat funktioniert!!! –