Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> REGEXP, CONVERT, COLLATE, problem w zapytaniu
code_berzerker
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 2.04.2007

Ostrzeżenie: (0%)
-----


Mam takie zapytanie:
  1. SELECT
  2. *
  3. FROM article a,
  4. structure s
  5. WHERE s.id = a.id_structure AND a.active = 1 AND LCASE(CONCAT_WS('', date_time, ' ', title, ' ', lead, ' ', content, ' ', author, ' ', source))
  6. REGEXP CONVERT(_utf8 'słowa kluczowe wyszukiwania' USING latin2) COLLATE latin2_general_ci


Używam go do wstępnej selekcji rekordów do przetworzenia przez mechanizm wyszukiwania w php.
wersja MySQL: 5.0.22
wersje PHP: 4.3.7 oraz 4.4.2
sposób wywołania zapytania: adodb oraz przy pomocy funkcji mysql_*
Zapytanie w każdej kombinacji powyższych wersji zwraca następujący błąd:
1139: Got error 'repetition-operator operand invalid' from regexp

Dziwi mnie tylko fakt, ze takie samo zapytanie wklejone do phpMyAdmina (używającego tej samej wersji php co moje skrypty) działa bez problemu.

Dodam że zapytanie nie zwracało błędów gdy nie używałem CONVERT ani COLLATE, ale wtedy nie wszystkie wyniki się znajdowały (dla bazy/tabel/pól ustawiona jest metoda porównywania znaków: latin2_general_ci).

Czy ktoś spotkał się z tym problemem i wie jak go rozwiązać?

pozdrawiam

EDIT1:
Naprawdę nikt nic o tym nie wie? Może ktos zna w takim razie inne forum na którym mógłbym się zapytać ...

Ten post edytował code_berzerker 5.04.2007, 12:59:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mysz
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


No to widzę pewien problem: mam na localhoście tylko PHP5, i tutaj na kilka sposobów działa wporzo. Mój przykładowy skrypt:
  1. <?php
  2.  
  3. $db = new PDO('mysql:host=localhost;dbname=test', 'mysz', 'passwd');
  4. $query = "SELECT
  5. *
  6. FROM article a
  7. WHERE a.active = 1 AND LCASE(CONCAT_WS(' ', date_time, title, lead, content, author, source))
  8. REGEXP CONVERT(_utf8 'łazienka' USING latin2) COLLATE latin2_general_ci ";
  9. $stmt = $db->query($query);
  10. echo '<pre>'.str_replace(array('&','<', '>'), array('&', '<', '>'), print_r($stmt->fetchAll(),1)).'</pre>';
  11.  
  12. $stmt = $db->prepare($query);
  13. $stmt->execute();
  14. echo '<pre>'.str_replace(array('&','<', '>'), array('&', '<', '>'), print_r($stmt->fetchAll(),1)).'</pre>';
  15.  
  16. $db = mysql_connect('localhost', 'mysz', 'ttt');
  17. $result = mysql_query ($query);
  18. $row = mysql_fetch_assoc($result);
  19.  
  20. echo '<pre>'.str_replace(array('&','<', '>'), array('&', '<', '>'), print_r($row,1)).'</pre>';
  21.  
  22. ?>


Żadnych problemów. Wersje softu na jakich chwilowo mogłem przetestować:
Kod
% php -v
PHP 5.2.1 (cli) (built: Feb 20 2007 19:10:04)
% mysql -umysz -ppasswd
Welcome to the MySQL monitor.  Commands end with; or \g.
Your MySQL connection id is 63
Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 10:11