Кто-нибудь знает, как комбинировать подготовленные команды PHP с LIKE? т.е.
"SELECT * FROM table WHERE name LIKE %?%";
Знак% должен идти в переменной, которую вы назначаете параметру, а не в запросе.
Я не знаю, используете ли вы mysqli или PDO, но с PDO это будет что-то вроде:
$st = $db->prepare("SELECT * FROM table WHERE name LIKE ?"); $st->execute(array('%'.$test_string.'%'));
EDIT :: Для пользователя mysqli
следующее.
$test_string = '%' . $test_string . '%'; $st->bind_param('s', $test_string); $st->execute();
Вы можете использовать оператор конкатенации вашей базы данных sql:
# oracle SELECT * FROM table WHERE name LIKE '%' || :param || '%' # mysql SELECT * from table WHERE name LIKE CONCAT('%', :param, '%')
Я не знаком с другими базами данных, но у них, вероятно, есть эквивалентная функция / оператор.
Вы можете попробовать что-то вроде этого:
"SELECT * FROM table WHERE name LIKE CONCAT(CONCAT('%',?),'%')"
в 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);
это работает для меня ..
Для меня отлично работает, я искал ответные часы, thx.
$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();
в$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();