2010-10-05 10 views
12
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%s%'", mysql_real_escape_string('test')); 

echo $test; 

Ausgang:MySQL LIKE + php sprintf

SELECT * FROM `table` WHERE `text` LIKE '%s 

aber es sollte Ausgabe:

SELECT * FROM `table` WHERE `text` LIKE '%test%' 

Antwort

34
... LIKE '%%%s%%'", mysql_real_escape_string('test')); 

die % Zeichen drucken Sie es mit sich selbst entkommen müssen. Daher werden die ersten zwei %% das % Zeichen ausgeben, während die dritte für den Typenspezifizierer %s. Sie benötigen am Ende auch ein Doppel %%.

+0

Danke . Das hat mir geholfen. –

3

Versuchen:

$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test')); 

In sprintf, wenn Sie ein % Zeichen erhalten möchten, müssen Sie %% einzufügen. So ist es %% für den ersten Platzhalter %, %s für den String selbst und %% für den letzten Platzhalter %.

0
$test = "SELECT * FROM `table` WHERE `text` LIKE '%s%'" . mysql_real_escape_string('test'); 

echo $test; 
1

Sie müssen die Prozentzeichen mit einem Prozentzeichen %% umgehen.

$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test')); 

echo $test; 
1

Sie sind jumble Kontexte. Aus Gründen der Einheitlichkeit, legen Sie die Dinge, die nicht in der SQL Apostrophe außerhalb des sprintf() Format-String sind:

$test = sprintf(
      "SELECT * FROM `table` WHERE" 
      . "`xt` LIKE '%s'", 
      "%" . mysql_real_escape_string("test") . "%" 
     );