Объедините подготовленные PHP отчеты с LIKE

php sql-like

7889 просмотра

6 ответа

Кто-нибудь знает, как объединить подготовленные операторы PHP с LIKE? т.е.

"SELECT * FROM table WHERE name LIKE %?%";

Автор: user29772 Источник Размещён: 12.11.2019 09:20

Ответы (6)


28 плюса

Решение

Знаки% должны идти в переменной, которую вы назначаете параметру, а не в запросе.

Я не знаю, используете ли вы mysqli или PDO, но с PDO это было бы что-то вроде:

$st = $db->prepare("SELECT * FROM table WHERE name LIKE ?");
$st->execute(array('%'.$test_string.'%'));

РЕДАКТИРОВАТЬ :: Для mysqliпользователя следующее.

$test_string = '%' . $test_string . '%';
$st->bind_param('s', $test_string);
$st->execute();
Автор: Chad Birch Размещён: 19.03.2009 05:55

7 плюса

Вы можете использовать оператор конкатенации вашей соответствующей базы данных sql:

# oracle
SELECT * FROM table WHERE name LIKE '%' || :param || '%'
# mysql
SELECT * from table WHERE name LIKE CONCAT('%', :param, '%')

Я не знаком с другими базами данных, но они, вероятно, имеют эквивалентную функцию / оператор.

Автор: Richard Levasseur Размещён: 19.03.2009 06:06

2 плюса

Вы можете попробовать что-то вроде этого:

"SELECT * FROM table WHERE name LIKE CONCAT(CONCAT('%',?),'%')"
Автор: St. John Johnson Размещён: 19.03.2009 03:43

1 плюс

в PHP с использованием MYSQLI вам нужно определить новый параметр, который будет объявлен как:

$stmt = mysqli_prepare($con,"SELECT * FROM table WHERE name LIKE ?");
$newParameter='%'.$query.'%';
mysqli_stmt_bind_param($stmt, "s", $newParameter);
mysqli_stmt_execute($stmt);

это работает для меня ..

Автор: A.Kryeem Размещён: 30.01.2014 10:11

0 плюса

Для меня отлично работает, я искал часы ответа, спасибо.

    $dbPassword = "pass";
    $dbUserName = "dbusr";
    $dbServer = "localhost";
    $dbName = "mydb";

    $connection = new mysqli($dbServer, $dbUserName, $dbPassword, $dbName);

    if($connection->connect_errno)
    {
        exit("Database Connection Failed. Reason: ".$connection->connect_error);
    }
        $tempFirstName = "reuel";
    $sql = "SELECT first_name, last_name, pen_name FROM authors WHERE first_name LIKE CONCAT(CONCAT('%',?),'%')";
    //echo $sql;

    $stateObj = $connection->prepare($sql);
    $stateObj->bind_param("s",$tempFirstName);
    $stateObj->execute();
    $stateObj->bind_result($first,$last,$pen);
    $stateObj->store_result();

    if($stateObj->num_rows > 0) {
        while($stateObj->fetch()){
            echo "$first, $last \"$pen\"";
            echo '<br>';
        }
    }

    $stateObj->close();
    $connection->close();
Автор: zoladp Размещён: 15.12.2016 03:16

0 плюса

Я просто адаптирую ответ Чеда Берча для таких людей, как я, которые привыкли использовать bindValue(...)для PDO:

$st = $db->prepare("SELECT * FROM table WHERE name LIKE :name");
$st->bindValue(':name','%'.$name.'%',PDO::PARAM_STR);
$st->execute();
Автор: JacopoStanchi Размещён: 16.04.2018 08:48
Вопросы из категории :
32x32