RSS

  • YouTube
  • LinkedIn
  • Google

Archiv nach dem Monat : Vielfache Werte verbindlich

Mehrere Werte verbindlich in PDO-SQL-Anweisung (PDOStatement)

Manchmal müssen wir einen einzelnen Wert über mehrere Spalten suchen, beim Erstellen von SQL-Anweisungen.

Nehmen wir an der folgenden Tabelle

  • [ENTITY_ONE]
    • ID
    • COLUMN_A
    • COLUMN_B
    • COLUMN_C
    • COLUMN_D
    • COLUMN_E

Wir benötigen einen einzelnen Wert auf Spalten suchen B,D und E Wir werden die folgende Anweisung verwenden, müssen

ID AUSWÄHLEN, COLUMN_A,(...Spalten..), COLUMN_E 
FROM ENTITY_ONE WHERE COLUMN_B LIKE '%search_value%' OR COLUMN_D LIKE '%search_value%' OR COLUMN_E LIKE '%search_value%';

Wir können in PHP-code

$q = '%search_value%';
$sql = "Auswählen * VON ENTITY_ONE WO COLUMN_B LIKE '$q' ODER COLUMN_D LIKE '$q' ODER COLUMN_E LIKE '$q'; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Abfrage($Sql);

Gut, this can work but we know that isn’;t der beste Ansatz. Wir brauchen verbindliche Werte verwenden, um SQL-Injection und andere schädlichen Leckereien zu vermeiden.

Also, der Code kann geändert werden

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE ? ODER COLUMN_D LIKE ? ODER COLUMN_E LIKE ?; 
$args = [$Q, $Q, $Q]; // Wir brauchen je einen Eintrag "?" on instruction
$pdo = new PDO($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql);
$stmt->;Ausführen($Args);

Viel besser, aber, beim Bau von komplexen SQL-Anweisung, things can be confusing with lots of arguments and don’;Vergessen Sie nicht: BESTELLEN FRAGEN.

Glücklich kann PDO binden Werte in unterschiedlicher Reihenfolge wenn Bindungen mit benannt werden..

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :First_arg oder COLUMN_D wie :Second_arg oder COLUMN_E wie :third_arg; 

$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// Eine Möglichkeit $args = [':first_arg' =>; $Q, ':third_arg' =>;$Q, ':second_arg' =>; $Q]; // Wir brauchen je einen Eintrag ":Name" on instruction 
$stmt->;Ausführen($Args); 
// Another way
$stmt->;bindValue(':Third_arg ". $Q);
$stmt->;bindValue(':First_arg ", $Q); 
$stmt->;bindValue(':Second_arg ", $Q);

$stmt->;Ausführen(); 

Hmm, seems that this isn’;t gut genug. Wir ändern nur die Verwendung von 1-indizierte Platzhalter um eine :benannten Platzhalter. There’;s kein Gewinn jenseits der Code lesbar und die Möglichkeit, in beliebiger Reihenfolge zu binden.

Ja, aber jetzt können wir die beste Vorgehensweise tun, wenn Sie einen einzigartigen Suchbegriff in mehrere Spalten verwenden. Wir können nur eine Bindung an eine oder mehrere :named placeholders ’;PDO ist smart und clever. Schauen Sie unsere endgültige Code hier.

$q = '%search_value%'; 
$sql = "Auswählen * VON ENTITY_ONE WHERE COLUMN_B LIKE :unique_arg ODER COLUMN_D LIKE :unique_arg ODER COLUMN_E LIKE :unique_arg; 
$pdo = neue g.A.($Dsn, $Benutzer, $bestehen); 
$stmt = $pdo->;Zubereiten($Sql); 
// One way 
$args = [':unique_arg' =>; $Q]; // Wir können alle binden :name with only one term 
$stmt->;Ausführen($Args); 
// Another way 
$stmt->;bindValue(':Unique_arg ", $Q); 
$stmt->;Ausführen(); 

Erspart eine Menge Tipparbeit beim Schreiben viele SQL-Anweisung mit demselben argument.