example-like- php mysql examples | w3resource

Using mysqli prepared statements with LIKE operator in SQL

Before running any query with mysqli, make sure you’ve got a properly configured mysqli connection variable that is required in order to run SQL queries and to inform you of the possible errors.

SELECT query with LIKE operator

In general, SELECT with LIKE is no different from any other SELECT query with prepared statements. However, there are two certain gotchas that one should keep in mind:

  1. A placeholder cannot represent an arbitrary part of a query but only a whole data literal (or, to put it simpler, a string or a number). Hence, an SQL like this field LIKE ‘%?%’ won’t work. Hence, the percent marks should be added to the source variable instead. Then ,a variabe that would contain something like ‘%search string%’ can be bound to a placeholder the regular way.
  2. bind_param() function accepts only variables, and strings are not allowed. Hence, a code like this $stmt->bind_param(«s», «%$var%»); won’t work, causing «Only variables can be passed by reference» error. So we must prepare our variable before binding it.

Knowing that now we can create a prepared statement with LIKE:

$name = "%$name%"; // prepare the $name variable 
$sql = "SELECT * FROM users WHERE name LIKE ?"; // SQL with parameters
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $name); // here we can use only a variable
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$rows = $result->fetch_all(MYSQLI_ASSOC); // all rows matched

Using a helper function

As you may noted, the code for a prepared statement is quite verbose. If you like to build a code like a Lego figure, with shining ranks of operators, you may keep it as is. If you, like me, hate useless repetitions and like to write concise and meaningful code, then there is a simple helper function. With it, the code will become two times shorter:

$sql = "SELECT * FROM users WHERE name LIKE ?"; // SQL with parameters
$stmt = prepared_query($conn, $sql, ['%$name%']);
$rows = $stmt->get_result()->fetch_all(MYSQLI_ASSOC); // fetch an array of rows

Unlike bind_param() , our helper function accepts strings as parameters, hence you can add percent marks right at the call time.

Читайте также:  Wordpress произвольные поля html

Got a question?

I am the only person to hold a gold badge in , and on Stack Overflow and I am eager to show the right way for PHP developers.

Besides, your questions let me make my articles even better, so you are more than welcome to ask any question you have.

SEE ALSO:

  • Top 10 PHP delusions
  • PDO Examples
  • Mysqli Examples
  • Principles of web-programming
  • Mysqli SELECT query with prepared statements
  • How to run a SELECT query using Mysqli
  • How to run an INSERT query using Mysqli
  • How to run an UPDATE query using Mysqli
  • Mysqli prepared statement with multiple values for IN clause
  • Mysqli examples
  • How to call stored procedures with mysqli
  • How to create a search filter for mysqli
  • How to run 1000s insert queries with mysqli?

Latest comments:

  • 17.07.23 21:18
    Jim for (The only proper) PDO tutorial:
    Thanks for the reply! I was hoping you would know if what I’m attempting is even possible! :).
    read more
  • 16.07.23 00:35
    Jim for (The only proper) PDO tutorial:
    Hi, I just discovered this site today, so first and foremost, thank you for all your work.
    read more
  • 27.06.23 05:30
    Jeff Weingardt for MVC in simpler terms or the structure of a modern web-application:
    I was just curious what you find the most effective way to learn php and become proficient? so.
    read more
  • 23.06.23 00:57
    Michael for INSERT query using PDO:
    I read your bit on not needing to check the status of execution. I’m curious, if I needed to.
    read more
  • 10.06.23 17:18
    Ian McKinnon for How to create a search filter for mysqli:
    Please tell me how I can convert this into a prepared statement. ‘A’ indicates that the retrieved.
    read more
Читайте также:  Сортировка значений словаря python

Add a comment

Please refrain from sending spam or advertising of any sort.
Messages with hyperlinks will be pending for moderator’s review.

Comments:

Thank you so much. I searched for hours before I found your solution. In this piece of code, $name = «%$name%»; I was using single quotes, changed to double quotes and my queries work like a charm. Thank you so much once again.

As of 2/05/2020, in both SQL queries on this page there is an equal sign after the ‘LIKE’ that should not be there.

Источник

PDO LIKE

Summary: in this tutorial, you’ll learn how to use PDO to execute a query with the LIKE operator.

Introduction to the SQL LIKE operator

The LIKE operator returns true if a character string matches a specified pattern. Typically, a pattern includes wildcard characters like:

For example, the %er% will match any string that contains the string er , e.g., peter , understand , etc.

Typically, you use the LIKE operator in the WHERE clause of the SELECT , UPDATE , and DELETE statement.

Execute a query that contains the LIKE operator in PDO

To execute a query that contains a LIKE operator in PDO, you need to construct the pattern upfront.

For example, to select the book with titles that contain the string ‘es, you first construct a SELECT statement like this:

$sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern';Code language: PHP (php)

And then bind the string ‘%es%’ to the prepared statement.

The following example illustrates how to execute a query that includes the LIKE operator:

 /** * Find books by title based on a pattern */ function find_book_by_title(\PDO $pdo, string $keyword): array < $pattern = '%' . $keyword . '%'; $sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern'; $statement = $pdo->prepare($sql); $statement->execute([':pattern' => $pattern]); return $statement->fetchAll(PDO::FETCH_ASSOC); > // connect to the database $pdo = require 'connect.php'; // find books with the title matches 'es' $books = find_book_by_title($pdo, 'es'); foreach ($books as $book) < echo $book['title'] . '
'
; >
Code language: PHP (php)

The function find_book_by_title() returns the books with the title that matches with the $keyword .

First, make the pattern by adding the wildcard characters to the beginning and end of the $keyword :

$pattern = '%' . $keyword . '%';Code language: PHP (php)

Second, construct an SQL statement that contains a LIKE operator in the WHERE clause:

$sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern';Code language: PHP (php)

Third, create a prepared statement:

$statement = $pdo->prepare($sql);Code language: PHP (php)

After that, execute the statement with the value that comes from the pattern:

$statement->execute([':pattern' => $pattern]);Code language: PHP (php)

Finally, return all rows from the result set by using the fetchAll() method:

return $statement->fetchAll(PDO::FETCH_ASSOC);Code language: PHP (php)

The following code find books with the title contains the keyword ‘es’ :

// connect to the database $pdo = require 'connect.php'; // find books with the title matches 'es' $books = find_book_by_title($pdo, 'es'); foreach ($books as $book) < echo $book['title'] . '
'
; >
Code language: PHP (php)
Marcus Makes a Movie Box of ButterfliesCode language: PHP (php)

Summary

Источник

Оператор MySQL LIKE

Оператор MySQL LIKE проверяет, соответствует ли конкретная символьная строка указанному шаблону.

expr LIKE pat [ESCAPE 'escape_char']
  • Сопоставление с образцом с использованием простого сравнения регулярных выражений SQL. Возвращает 1 (ИСТИНА) или 0 (ЛОЖЬ). Если expr или pat имеют значение NULL, результат равен NULL.
  • Шаблон не обязательно должен быть литеральной строкой. Например, его можно указать как строковое выражение или столбец таблицы.
  • В соответствии со стандартом SQL, LIKE выполняет сопоставление для каждого символа, поэтому он может давать результаты, отличные от оператора сравнения =.
  • Оператор LIKE использует WILDCARDS (то есть%, _) для сопоставления с шаблоном. Это очень полезно для проверки наличия в записях определенного символа или строки.

% используется для соответствия любому количеству символов, даже нулю символов.
_ используется для соответствия ровно одному символу.

Чтобы проверить наличие буквенных символов подстановочного знака, перед ним должен быть escape-символ. Если вы не укажете символ ESCAPE, подразумевается «/».
/% используется для соответствия одному символу «%».
/ _ Соответствует одному символу «_»

Версия MySQL: 5.6

Пример: оператор MySQL LIKE

Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любое имя автора, имя которого начинается с символа «W», за которым следуют любые символы.

SELECT aut_name, country FROM author WHERE aut_name LIKE 'W%'; 
mysql> mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE 'W%'; + ----------------- + --------- + | aut_name | страна | + ----------------- + --------- + | Уильям Нортон | Великобритания | | Уильям Моэм | Канада | | Уильям Энтони | Великобритания | + ----------------- + --------- + 3 ряда в наборе (0,05 сек)
         

List of authors whose name starts with 'w', along with their country:

query('SELECT aut_name, country FROM author WHERE aut_name LIKE "W%"') as $row) < echo ""; echo ""; echo ""; echo ""; > ?>
PublisherCountry
" . $row['aut_name'] . "" . $row['country'] . "
            Publisher Country     %> catch (Exception ex) < out.println("Can’t connect to database."); >%>   

Пример: оператор MySQL LIKE, соответствующий концу

Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любого автора, имя которого заканчивается строкой ‘on’.

SELECT aut_name, country FROM author WHERE aut_name LIKE '%on'; 
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE '% on'; + ---------------- + --------- + | aut_name | страна | + ---------------- + --------- + | Уильям Нортон | Великобритания | | Томас Мертон | США | | Пирс Гибсон | Великобритания | | Джозеф Мильтон | США | + ---------------- + --------- + 4 ряда в наборе (0,00 сек)

Пример: оператор MySQL LIKE, соответствующий строке

Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любого автора, в имени которого есть строка «an». Имя автора хранится в столбце aut_name.

SELECT aut_name, country FROM author WHERE aut_name LIKE '%an%'; 
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE '% an%'; + ---------------------- + ----------- + | aut_name | страна | + ---------------------- + ----------- + | Уильям Энтони | Великобритания | | С.Б.Сваминатан | Индия | | Томас Морган | Германия | | Джон Бежеман Хантер | Австралия | | Эван Хайек | Канада | | Батлер Андре | США | + ---------------------- + ----------- + 6 рядов в наборе (0,00 сек)

Пример: оператор MySQL LIKE, соответствующий указанной строке

Следующее утверждение MySQL ищет всех авторов, чьи родные города, такие как «Лондон», «Лэндон» и т. Д., Подстановочный знак подчеркивания используется для упоминания одного символа.

SELECT aut_name, country,home_city FROM author WHERE home_city LIKE 'L_n_on'; 
mysql> ВЫБРАТЬ aut_name, страну, home_city -> ОТ автора -> ГДЕ home_city LIKE 'L_n_on'; + -------------- + --------- + ----------- + | aut_name | страна | home_city | + -------------- + --------- + ----------- + | Пирс Гибсон | Великобритания | Лондон | | Си Джей Уайльд | Великобритания | Лондон | + -------------- + --------- + ----------- + 2 ряда в наборе (0,00 сек)

Пример: оператор MySQL LIKE, соответствующий управляющему символу

Для поиска символа подстановки или комбинации символа подстановки и любого другого символа символу подстановки должен предшествовать строка ESCAPE. В MySQL строка ESCAPE по умолчанию — «/». Следующая инструкция MySQL возвращает те записи, чьи isbn_no содержат «_16».

SELECT book_name,isbn_no,no_page,book_price FROM book_mast WHERE isbn_no LIKE '%\_16%'; 
mysql> SELECT book_name, isbn_no, no_page, book_price -> ОТ book_mast -> ГДЕ isbn_no НРАВИТСЯ "% / _ 16%"; + --------------------------------- + ------------- + - -------- + ------------ + | book_name | isbn_no | no_page | book_price | + --------------------------------- + ------------- + - -------- + ------------ + | Сети и Телекоммуникации | 00009790_16 | 95 | 45,00 | + --------------------------------- + ------------- + - -------- + ------------ + 1 ряд в наборе (0,00 сек)

Пример: оператор MySQL LIKE, соответствующий начальной и конечной строке

Подстановочные знаки также можно использовать в середине шаблона поиска. Следующая инструкция MySQL найдет всех авторов, чьи имена начинаются с ‘t’ и заканчиваются на ‘n’.

SELECT aut_name, country FROM author WHERE aut_name LIKE 't%n'; 
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE 't% n'; + --------------- + --------- + | aut_name | страна | + --------------- + --------- + | Томас Морган | Германия | | Томас Мертон | США | + --------------- + --------- + 2 ряда в наборе (0,00 сек)

Слайд-шоу функции сравнения MySQL и операторов

«MySQL

Предыдущий: Меньше чем оператор ( <)
Далее: НЕ МЕЖДУ И

Источник

Оцените статью