- SQL грешка
12
WT форуми -> PHP MySQL ASP.NET -> SQL грешка
Създайте нова тема Напишете отговор 
Автор Съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 12:29 pm     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 '-6, 6' at line 1


Грешката идва там където подавам параметрите на страницирането.

PHP code:

$this->_view->_image = $this->_paginationModel->pagination($this->_url, 'admin', 'offer', 6, '/SelectAdmin/run/1?select=order_date', null, null, 'order_date');
$this->_view->_pagination = $this->_pagination->navigation(2, '', $this->_url, 'admin', 'offer', 6, '/SelectAdmin/run/1?select=order_date', null, null, 'order_date');
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 4:05 pm      Отговорете с цитат


По горния въпрос до някъде се оправих, обаче се появи още един проблем. Липсват параметрите от url-a в $_GET. Например имам /SelectAdmin/run/1?select=order_price_high и всичко след 1 го няма в $_GET. Някакви идеи на какво може да се дължи това?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 13/03/2018 4:56 pm      Отговорете с цитат


Разясни малко кое от адреса какво е и как го взимаш. GET['select'] имаш ли?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 5:23 pm      Отговорете с цитат


И това го оправих. Беше от .htacces-a където го гласихме в началото. Сега се мъча с трети проблем по веригата на страницирането. Нещо не иска да премине на следваща страница. Може всичко да е свързано с първоначалната грешка в темата. Принципно за да проработи искаше параметъра per_page да го подам с минус -6. Не мога да разбера защо и дали това не чупи други неща. Също така заявките ми бяха от типа SELECT * FROM $table ORDER BY price DESC LIMIT $_limit, $_perPage и трябваше този $_perPage да го премахна за да работи.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 13/03/2018 5:39 pm      Отговорете с цитат


Ами офсета ти според по-горната грешка в SQL е -6. Не трябва да е -6. Не знам как си го докарал да стане минус там.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 6:21 pm      Отговорете с цитат


Еми само по този начин проработи. Как трябва да го направя?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 13/03/2018 6:47 pm      Отговорете с цитат


Еми офсета трябва да е на 0, да можеш да изваждаш записите от ID 1.

PHP code:

$perPage = 15;
$currentPage = 1;
$offset = ($currentPage * $perPage) - $perPage;

// SELECT ... FROM table ORDER BY ... LIMIT $offset, $perPage



П.П. Сега като разгледах, май бъркаш двете стойности на LIMIT клаузата. Когато имаш две стойности там, първата ти е офсета - т.е. от къде да започнат записите да се вадят, а втората ти е реално лимита, което трябва да ти е по колко записа да се извеждат.

Т.е. в твоя случай.

SQL code:

LIMIT $perPage OFFSET $limit
-- е равно на
LIMIT $limit, $perPage
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 7:21 pm      Отговорете с цитат


Ако те разбирам правилно трябва да добавя още един параметър към функцията който да е за offset?

Ето как е в момента.

PHP code:

public function pagination($page, $database, $table, $per_page, $link, $category, $sub_category, $selectOrder)
{
$_page = $this->getPage($page, $link);

$_total_records = $this->totalRecords($database, $table, $category, $sub_category, $selectOrder);

$_per_page = $this->perPage($per_page);

if ($_page > $_total_records)
{
$_page = $_total_records;
}

$_limit = ($_page - 1) * $_per_page;

if ($category == null && $sub_category == null && $selectOrder == 'order_date')
{
$_sql = $this->_database->prepare("SELECT * FROM $table LIMIT $_limit, $_per_page")->execute()->fetchAllAssoc();
}
elseif ($category == null && $sub_category == null && $selectOrder == 'order_price_low')
{
$_sql = $this->_database->prepare("SELECT * FROM $table ORDER BY price ASC LIMIT $_limit, $_per_page")->execute()->fetchAllAssoc();
}
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 13/03/2018 8:08 pm      Отговорете с цитат


teroristd написа:
Ако те разбирам правилно трябва да добавя още един параметър към функцията който да е за offset?

Ето как е в момента.

PHP code:

public function pagination($page, $database, $table, $per_page, $link, $category, $sub_category, $selectOrder)
{
$_page = $this->getPage($page, $link);

$_total_records = $this->totalRecords($database, $table, $category, $sub_category, $selectOrder);

$_per_page = $this->perPage($per_page);

if ($_page > $_total_records)
{
$_page = $_total_records;
}

$_limit = ($_page - 1) * $_per_page;

if ($category == null && $sub_category == null && $selectOrder == 'order_date')
{
$_sql = $this->_database->prepare("SELECT * FROM $table LIMIT $_limit, $_per_page")->execute()->fetchAllAssoc();
}
elseif ($category == null && $sub_category == null && $selectOrder == 'order_price_low')
{
$_sql = $this->_database->prepare("SELECT * FROM $table ORDER BY price ASC LIMIT $_limit, $_per_page")->execute()->fetchAllAssoc();
}
}


Не, $limit ти е офсета, просто е объркващо написано, защото там където е няма общо с лимит. Принципно трябва да работи, но без да се дебъгне няма как.

Не съм сигурен, че $_page трябва да ти взима $_total_records променливата. Ами ако имаш 90 записа, които трябва да се разпределят на 9 страници по 10. Нещо ми куца тази логика.
Дебъгни малко променливи вътре да видиш кое как се преобразува и какво точно се случва, защото УЖ кода е добре, освен частта с $_page = $_total_records.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 8:19 pm      Отговорете с цитат


Извинявай за въпроса но какво имаш предвид под дебъг? Какво да направя?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 54
Bonus: 108
Мнения: 693
Мнение 13/03/2018 8:23 pm      Отговорете с цитат


Ее, терористе, тука ще се караме вече. От кога се занимаваш с програмиране, а не си дебъгвал код?

Дебъгваш код, когато нещо не работи като хората и искаш да установиш от къде идва проблема. Понеже PHP е малко сложен в това отношение, най-лесния вариант е да ползваш var_dump на определени места в кода, да установиш кое каква стойност приема, за да си сигурен, че работи, както трябва да работи.
Това е най-лесния вариант. Иначе се правят unit tests, които в момента са прекалено голяма лъжица за твоята уста и няма смисъл да се обяснявам за тях.

Просто, в случая, ако не си сигурен, че получаваш правилни стойности(за пример, някой променливи преминават през разни методи и т.н. и де факто не знаеш те какво връщат), просто ги бутни в един var_dump да видиш на гледно какво аджеба се получава там и защо примерно от 6 е станало -6.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 81
Bonus: 174
Мнения: 1705
Мнение 13/03/2018 8:36 pm      Отговорете с цитат


Дава ми правилните стойности. Не е станало на -6 и не знам защо пише така в грешката.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12
Страница 1 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети