1. <?php
  2.  
  3. class Language
  4. {
  5. private $name = 'english';
  6. private $sname = 'en';
  7. private $fname = 'english.lng';
  8. private $id = 0;
  9.  
  10. public $lang = array();
  11.  
  12. function __construct()
  13. {
  14. if(preg_match('/^(?:www.)?([a-z]{2}).(?:w+?.w+?|localhost)$/i', $_SERVER['HTTP_HOST'], $m))
  15. {
  16. $lang = $m[1];
  17. }
  18. else
  19. {
  20. $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
  21. }
  22. // po tym zabiegu zmienna $lang zawiera 'en', gdy wchodzę przez en.localhost, a pl, gdy wchodzę przez pl.localhost
  23. if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$GLOBALS['fmw']['db']->escape_string($lang)."'") && $result->num_rows == 1)
  24. {
  25. $row = $result->fetch_assoc();
  26. $this->name = $row['name'];
  27. $this->sname = $row['sname'];
  28. $this->fname = $row['fname'];
  29. $this->id = $row['id'];
  30. }
  31. else if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$this->sname."'") && $result->num_rows == 1)
  32. {
  33. $row = $result->fetch_assoc();
  34. $this->name = $row['name'];
  35. $this->sname = $row['sname'];
  36. $this->fname = $row['fname'];
  37. $this->id = $row['id'];
  38. }
  39. else
  40. {
  41. trigger_error("Can't find default language!", E_USER_ERROR);
  42. }
  43. if(file_exists("cms/languages/".$this->fname))
  44. {
  45. $this->lang = file("cms/languages/".$this->fname, FILE_IGNORE_NEW_LINES);
  46. }
  47. else
  48. {
  49. trigger_error("Can't find language file! [".$this->fname."]", E_USER_ERROR);
  50. }
  51. }
  52. public function getLangID()
  53. {
  54. return $this->id;
  55. }
  56. }
  57.  
  58. ?>


Za każdym razem, gdy wykonuję ten skrypt, wywala mi error Can't find default language. W bazie danych mam jedno pole:

więc warunek

  1. <?php
  2. else if($result = $GLOBALS['fmw']['db']->query("SELECT * FROM languages WHERE sname = '".$this->sname."'") && $result->num_rows == 1)
  3. ?>


powinien być spełniony. Co może być nie tak? Dodam, że $GLOBALS['fmw']['db']->error nie ma żadnej wartości.

Dodam także, że num_rows = 0 w obu warunkach. :X Jeśli z poziomu phpmyadmin wywołam:
  1. SELECT * FROM languages WHERE sname='en'


wszystko jest ok, zwraca jeden wynik.

Oczywiście korzystam z mysqli.