2012-03-26 15 views
0

Ich versuche eine Suche zu erstellen, wo die Spalte und der Wert beide Variablen sind, die vorbereitete Anweisungen verwenden. Die Abfrage ist wo ich Hilfe brauche.Mit mehreren Variablen suchen PHP/Mysql

$column=$_POST['filter'][0][columnName]; 
$value = trim($_POST['filter'][0][value]); 

$stmt = $mysql->prepare("select * from TABLE WHERE $column like '%$value%'"); 

Ich möchte in der Lage sein, verschiedene Spalte und Wert-Paare angeben, in Verbindung mit eachother- zu verwenden, so dass ich Spalte eins für einen Wert suchen und auch Spalte zwei für einen anderen Wert.

danke!

+1

Klingt wie ein gutes Ziel, also was ist das Problem? – Robert

+1

Ihr Code ist offen für SQL-Injection-Angriffe. Gut, dass Sie vorbereitete Anweisungen verwenden, dass Sie keine Platzhalter verwenden, um die Anti-Injektionsfunktionen der vorbereiteten Anweisung zu verwenden. –

+0

Robert, ich versuche herauszufinden, wie man mehrere Spalten nach mehreren Begriffen durchsuchen kann. (Prägnant, wenn möglich) Marc, ja, ich verbinde die Params Ich habe gerade den Code kaputt gemacht, um es zum Laufen zu bringen - mein Fehler war ein langer Tag . Danke fürs Hinschauen. – Severian

Antwort

0

Ich glaube nicht, PHP mysql Bibliothek hat Anweisungen vorbereitet. Ist Ihre $ mysql-Variable tatsächlich ein mysqli- oder pdo-Verbindungsobjekt?

Mit Mysqli, Ihr Code würde wie folgt aussehen:

$dbconnection = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 
$stmt = $dbconnection->prepare("select * from TABLE WHERE $column like '%?%'"); 
$stmt->bind_param('s',$value); 

Es gibt keine Möglichkeit, einen Parameter für einen Spaltennamen zu binden, was bedeutet, dass Sie $column direkt in Ihre Abfrage stecken einfügen. Dies mit jedem Wert zu tun, den der Benutzer Ihnen in POST weitergegeben hat, ist ein kleines Sicherheitsloch. Da es darauf beschränkt ist, dass es mit einem Ihrer Spaltennamen übereinstimmt, würde ich vorschlagen, es zuerst zu überprüfen, um sicherzustellen, dass es nicht auf etwas anderes eingestellt ist.

+0

yeah seine mysqli, sorry. Ich habe versucht, es so weit wie möglich zu durchbrechen. Ich versuche immer noch, den besten Weg herauszufinden, wie es funktioniert. Ich werde mich mit Sicherheit befassen. Danke, ich wusste nicht, dass du einen Param für Spaltennamen nicht binden kannst, das hilft mir schon. Was wäre der beste Weg, das zu programmieren? Sag, ich überprüfe und stelle sicher, dass es eine der 20 Spalten ist, die ich habe, was dann? – Severian

+0

Sie können den Spaltennamen wie eine Variable in Ihren Beispielcode einfügen. Es bietet nicht die Sicherheit, die durch das Binden eines Parameters entsteht, wie Sie es mit $ value tun, aber solange Sie sicherstellen, dass es ein genehmigter Spaltenname ist, ist alles in Ordnung. – octern

Verwandte Themen