Yii Framework Forum: Syntax SQL error po uruchomieniu aplikacji na localhost - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Syntax SQL error po uruchomieniu aplikacji na localhost Rate Topic: -----

#1 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 20 October 2011 - 07:08 AM

Witam,
próbowałem przenieś aplikację z zewnętrznego serwera na lokalny.
Po konfiguracji skopiowanej aplikacji, ustawiłem połączenie z bazą danych, jednak każdorazowo podczas uruchomienia wyświetla się poniższy komunikat:

CDbException

CDbCommand nie zdołał wykonać polecenia SQL: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE code = 'pl' LIMIT 1' at line 1


Poniżej przesyłam zawartość application.log dotyczącej powyżej opisywanej sytuacji:

2011/10/20 13:13:51 [error] [system.db.CDbCommand] Error in querying SQL: SHOW COLUMNS FROM `Language`
2011/10/20 13:13:51 [error] [exception.CDbException] exception 'CDbException' with message 'Tabela "Language" dla bieżącego rekordu klasy "Language" nie została znaleziona w bazie danych.' in C:\Xampp\htdocs\testpage.pl\yii\db\ar\CActiveRecord.php:2244
Stack trace:
#0 C:\Xampp\htdocs\testpage.pl\yii\db\ar\CActiveRecord.php(656): CActiveRecordMetaData->__construct(Object(Language))
#1 C:\Xampp\htdocs\testpage.pl\protected\models\Language.php(18): CActiveRecord::model('Language')
#2 C:\Xampp\htdocs\testpage.pl\protected\components\TpController.php(113): Language::model()
#3 C:\Xampp\htdocs\testpage.pl\protected\components\TpController.php(28): TpController->setLangId()
#4 C:\Xampp\htdocs\testpage.pl\yii\web\CWebApplication.php(405): TpController->__construct('site', NULL)
#5 C:\Xampp\htdocs\testpage.pl\yii\web\CWebApplication.php(326): CWebApplication->createController('')
#6 C:\Xampp\htdocs\testpage.pl\yii\web\CWebApplication.php(120): CWebApplication->runController('')
#7 C:\Xampp\htdocs\testpage.pl\yii\base\CApplication.php(135): CWebApplication->processRequest()
#8 C:\Xampp\htdocs\testpage.pl\index.php(12): CApplication->run()
#9 {main} REQUEST_URI=/
2011/10/20 13:13:51 [error] [system.db.CDbCommand] Error in querying SQL: SELECT * FROM  WHERE code = 'pl' LIMIT 1


Będę wdzięczny za ewentualne rady w rozwiązaniu niedogodności.
0

#2 User is offline   redguy 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 774
  • Joined: 02-July 10
  • Location:Central Poland

Posted 20 October 2011 - 09:06 AM

Tabela "Language" dla bieżącego rekordu klasy "Language" nie została znaleziona w bazie danych.

to chyba mowi wszystko? sprawdz czy przeniosles wszystkie tabele. jesli przenosiles miedzy srodowiskiem windows i linux - sprawdz tez wielkosc liter (dla mysql pod linuksem wielkosc liter w nazwie tabeli ma znaczenie, pod windows - nie)
red
0

#3 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 21 October 2011 - 02:21 AM

View Postredguy, on 20 October 2011 - 09:06 AM, said:

Tabela "Language" dla bieżącego rekordu klasy "Language" nie została znaleziona w bazie danych.

to chyba mowi wszystko? sprawdz czy przeniosles wszystkie tabele. jesli przenosiles miedzy srodowiskiem windows i linux - sprawdz tez wielkosc liter (dla mysql pod linuksem wielkosc liter w nazwie tabeli ma znaczenie, pod windows - nie)


Dzięki za odpowiedź, sprawa wygląda w ten sposób że lokalny serwer apache jest postawiony na Windowsie, a z tego co piszesz dla tego systemu wielkość liter nie ma znaczenia. Dodatkowo tabela "Language" jest fizycznie w bazie, posiadając identyczne rekordy jak w wersji online.
Głowię się nad tym tematem od tygodnia i ręce opadają - naprawdę nic nie mogę wymyślić. Czy przyczyna może leżeć jeszcze w innej kwestii?
Jeżeli jest komunikat:
Tabela "Language" dla bieżącego rekordu klasy "Language" nie została znaleziona w bazie danych.

to na bank połączenie z bazą danych zostało pomyślnie nawiązane?
0

#4 User is offline   Yarro 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 23-January 09

Posted 21 October 2011 - 07:06 AM

Tak, ten komunikat oznacza, że połączenie z bazą danych zostało nawiązane poprawnie.
Komunikat sugeruje, że w bazie danych nie masz tabeli powiązanej z klasą AR 'Language'. sprawdź co zwraca metoda tableName() klasy Language. O ile w Windows nazwy plików nie mają znaczenia, o tyle nazwy table w już mogą mieć.

Czy komenda "SHOW COLUMNS FROM `Language`" zwraca wyniki?
0

#5 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 21 October 2011 - 08:46 AM

View PostYarro, on 21 October 2011 - 07:06 AM, said:

Tak, ten komunikat oznacza, że połączenie z bazą danych zostało nawiązane poprawnie.
Komunikat sugeruje, że w bazie danych nie masz tabeli powiązanej z klasą AR 'Language'. sprawdź co zwraca metoda tableName() klasy Language. O ile w Windows nazwy plików nie mają znaczenia, o tyle nazwy table w już mogą mieć.

Czy komenda "SHOW COLUMNS FROM `Language`" zwraca wyniki?


Dzięki za odpowiedź, metoda tableName zwraca wartość 'Language':

	public function tableName()
	{
		return 'Language';
	}


Odnośnie pytania dot. SHOW COLUMNS FROM `Language`, jak mogę najłatwiej sprawdzić czy faktycznie zwraca cokolwiek?
0

#6 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 24 October 2011 - 02:24 AM

Jest mi ktoś w stanie pomóc, będę bardzo wdzięczny. Od opisywanego momentu sytuacja bez zmian.

Patrzę teraz tak na stack trace i skoro jest taki error:

SELECT * FROM  WHERE code = 'pl' LIMIT 1


to jakimś trafem nie jest podana tabela z której pobieramy dane.
Nie wiem jednak jak odnaleźć gdzie powyższe zapytanie jest dokonywane, i jak ewentualnie sprawdzić dlaczego nie definiuje z jakiej tabeli pobiera dane.
0

#7 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 08-July 09
  • Location:Poland

Posted 24 October 2011 - 03:53 AM

Wklej tutaj cały model Language i sprawdź co pokazuje SHOW COLUMNS FROM `Language` i najlepiej też wklej wynik zapytania. Wpisz to albo w konsoli mysql, albo w narzędziu typu PHPMyAdmin, MySQL Workbench. Zobacz też jakie masz uprawnienia na użytkowniku który łączy się z bazą ze strony Yii. Jest to root, czy jakiś inny użytkownik?
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#8 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 24 October 2011 - 07:46 AM

View Postsidewinder, on 24 October 2011 - 03:53 AM, said:

Wklej tutaj cały model Language i sprawdź co pokazuje SHOW COLUMNS FROM `Language` i najlepiej też wklej wynik zapytania. Wpisz to albo w konsoli mysql, albo w narzędziu typu PHPMyAdmin, MySQL Workbench. Zobacz też jakie masz uprawnienia na użytkowniku który łączy się z bazą ze strony Yii. Jest to root, czy jakiś inny użytkownik?



Ponizej przesyłam kod modelu:

<?php

class Language extends CActiveRecord
{
	/**
	 * The followings are the available columns in table 'Language':
	 * @var integer $id
	 * @var string $code
	 * @var string $name
	 */

	/**
	 * Returns the static model of the specified AR class.
	 * @return CActiveRecord the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'Language';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		return array(
			array('code','length','max'=>2),
			array('name','length','max'=>45),
			array('code, name', 'required'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'news' => array(self::HAS_MANY, 'News', 'lang_id'),
			'subpage' => array(self::HAS_MANY, 'SubPage', 'lang_id'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'Id',
			'code' => 'Code',
			'name' => 'Name',
		);
	}
}


W wyniku polecenia SQL, uzyskałem następujące informacje:
Field 	Type 	Null 	Key 	Default 	Extra
id 	int(11) 	NO 	PRI 	NULL 	auto_increment
code 	varchar(2) 	NO 	  	NULL 	 
name 	varchar(45) 	NO 	  	NULL 	 


Natomiast w main.php, ustawione jest połączenie poprzez 'roota' (bez hasła), który po stronie bazy ma pełne uprawnienia.
0

#9 User is offline   sidewinder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 210
  • Joined: 08-July 09
  • Location:Poland

Posted 24 October 2011 - 08:23 AM

Wszystko wygląda ok... Przychodzi mi do głowy kilka rzeczy:
Czy masz włączone cachowanie bazy danych?
Może jest coś nie tak z samym frameworkiem? Spróbuj pobrać raz jeszcze...
Czy jest możliwe, że nie przeniosły się wszystkie dane w db? Masz skonfigurowane constrainty? Może być tak, że masz wpis w News albo Subpage, ale nie ma odpowiedniego wpisu w language...
---------------------------------------------------------------------
"Never memorize what you can look up in books."
Albert Einstein
0

#10 User is offline   Tomek 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 20-October 11

Posted 24 October 2011 - 09:00 AM

View Postsidewinder, on 24 October 2011 - 08:23 AM, said:

Wszystko wygląda ok... Przychodzi mi do głowy kilka rzeczy:
Czy masz włączone cachowanie bazy danych?
Może jest coś nie tak z samym frameworkiem? Spróbuj pobrać raz jeszcze...
Czy jest możliwe, że nie przeniosły się wszystkie dane w db? Masz skonfigurowane constrainty? Może być tak, że masz wpis w News albo Subpage, ale nie ma odpowiedniego wpisu w language...


Sidewinder, wygląda na to że problem się rozwiązał.
Leżał on po stronie wpisywanego adresu (localhost).
Okazuje się że aplikacja pobiera z adresu URL rodzaj języka witryny i jeżeli nie było przyrostka (pl, en) w adresie to nie było możliwości poprawnego wczytania strony.

Dzięki wszystkim za czas poświęcony we wgłębianie się w mój przypadek.
Pozdrawiam
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users