Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak powinienem zmienić znaczenie znaków w tym zapytaniu LIKE?

Z Podręcznika MySQL :

Powinieneś więc zmienić ciąg znaków dla LIKE operatora w dwóch krokach.

W PHP może to wyglądać tak:

// Your search string, for example, from POST field
$string = $_POST['column'];

// First step - LIKE escaping
$string = str_replace(array('\\', '_', '%'), array('\\\\', '\\_', '\\%'), $string);

// Second step - literal escaping
$string = mysql_real_escape_string($string);

// Result query
mysql_query("SELECT * FROM `table` WHERE `column` LIKE '%".$string."%'");

AKTUALIZACJA:

Użyj MySQLi

// Connect to database
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// Your search string, for example, from POST field
$string = $_POST['column'];

// First step - LIKE escaping
$string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);

// Second step - literal escaping
$string = $mysqli->real_escape_string($string);

// Result query
$mysqli->query("SELECT * FROM `table` WHERE `column` LIKE '%{$string}%'");

Użyj PDO

// Connect to database
$conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

// Your search string, for example, from POST field
$string = $_POST['column'];

// First step - LIKE escaping
$string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);

// Second step - literal escaping
$string = $conn->quote($string);

// Result query
$conn->query("SELECT * FROM `table` WHERE `column` LIKE '%{$string}%'");

Lub możesz użyć przygotowanego oświadczenia PDO , zamiast drugiego kroku (dosłowna ucieczka):

// Connect to database
$conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

// Your search string, for example, from POST field
$string = $_POST['column'];

// First step - LIKE escaping
$string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);

// Prepare a statement for execution
$statement = $conn->prepare("SELECT * FROM `table` WHERE `column` LIKE ?");

// Execute a prepared statement
$statement->execute(["%{$string}%"]);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwiększyć licznik i zwrócić wartość w MySQL?

  2. Android :Jak przesyłać dane do bazy danych MySQL bez użycia JDBC , PHP lub jakiejkolwiek innej usługi internetowej?

  3. Czy mogę liczyć sesje, aby określić liczbę osób online?

  4. PHP/MYSQL zezwala na tylko jeden głos na członka?

  5. Nie mogę uzyskać tego zapytania sprzężenia mysql, aby uzyskać pożądany wynik