Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przerobienie zapytania SQL
Forum PHP.pl > Forum > PHP
XhtmlProject
Witam, potrzebuję przerobić poniższe zapytanie (nie wiem jak wstawić operator LIKE):

  1. <?php
  2. if(isset($_REQUEST['word'])) {
  3. $word = stripslashes($_REQUEST['word']);
  4. // Prepared Statement
  5. $db = new mysqli('#*$!', '#*$!', '#*$!', '#*$!');
  6. $db -> query("SET NAMES 'latin2'");
  7. $stmt = $db->stmt_init();
  8. if($stmt->prepare("SELECT `user_id`, `model`, `vendor`, `registration_date` FROM `my_database` WHERE `model` = ? OR `vendor` = ? ORDER BY registration_date DESC")) {
  9. $stmt->bind_param('ss', $word,$word);
  10. $stmt->execute();
  11. $stmt->bind_result($id_var, $model_var, $vendor_var, $reg_var);
  12. while($stmt->fetch()) {
  13. echo '<table>';
  14. echo '<td><b>ID:</b> '.$id_var.'</td><tr />';
  15. echo '<td><b>Model:</b> '.$model_var.'</td><tr />';
  16. echo '<td><b>Wprowadzono:</b> '.$reg_var.'</td><tr />';
  17. echo '<td><b>Odnośnik:</b> <a href="http://www.mypage.com/catalog/detail.php?id='.$id_var.'">Go there</a></td><br />';
  18. echo '</table>';
  19. }}
  20.  
  21. else {
  22. echo 'There is no word in database<br />';
  23. echo $word;
  24. }
  25. }
  26. ?>


Chce to zrobić tak jak na poniższym przykładzie:

  1. $query = 'SELECT user_id, model, vendor FROM my_database WHERE model LIKE '%' . $word . '%' OR vendor LIKE '%' . $word . '%' ORDER BY registration_date DESC';


Ok poradziłem sobie, przykład dla potomnych:

  1. if($stmt->prepare("SELECT `user_id`, `model`, `vendor`, `registration_date` FROM `$search_type` WHERE `model` LIKE CONCAT('%',?,'%') OR `vendor` LIKE CONCAT('%',?,'%') ORDER BY registration_date DESC")) {
lukaskolista
Tylko po co zaprzegac system bazodanowy do laczenia stringow, skoro pochodza one tylko i wylacznie z srodowiska php?
SmokAnalog
Możesz również dodać znaki procentów w momencie podawania wartości parametru. Oba sposoby zadziałają.
lukaskolista
Wiem, ze zadzialaja, ale z optymalizacyjnego punktu widzenia tylko jeden jest poprawny smile.gif

Jedna z podstawowych zasad: to, ze cos dziala nie znaczy, ze jest dobrze zrobione.
SmokAnalog
Cytat(lukaskolista @ 9.07.2012, 08:16:53 ) *
Wiem, ze zadzialaja, ale z optymalizacyjnego punktu widzenia tylko jeden jest poprawny smile.gif

Jedna z podstawowych zasad: to, ze cos dziala nie znaczy, ze jest dobrze zrobione.

A w jakim sensie to nie jest dobrze zrobione?
  1. $sth->bindValue(':word', '%'.$word.'%', PDO::PARAM_STR);
lukaskolista
Pokaz mi ta linijke w jego kodzie, bo jej jakos nie widze.
XhtmlProject
Dzięki za info.

Jeszcze jedno, jeśli w bazie mam zapisany model urządzenia:

JVs200

jak mogę na moim przykładzie napisać kod, żeby po wpisaniu jvs200 lub Jvs200 lub jvS znalazł JVs200

?
SmokAnalog
Większość kodowań w MySQL ignoruje wielkość liter dla porównań, w tym dla LIKE. Jeśli nie korzystasz np. Z UTF8 binarnego, to wystarczy zwyczajny LIKE.
CuteOne
  1. $text = strtolower('Hd3dJ');
  2.  
  3. //query
  4. SELECT * FROM xxx WHERE LOWER(`yyy`) = '$text'


ps. nie używaj LIKE do tak prostych zapytań bo narobisz sobie kłopotów smile.gif
XhtmlProject
Działa z ->
  1. $word= strtolower($word);


Dzięki.


Cytat(CuteOne @ 9.07.2012, 15:45:12 ) *
  1. //query
  2. SELECT * FROM xxx WHERE LOWER(`yyy`) = '$text'

ps. nie używaj LIKE do tak prostych zapytań bo narobisz sobie kłopotów smile.gif


Kłopotów w jakim sensie ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.