Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не получается создать запрос MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pro_xaoc
Отправлено: 18 Апреля, 2014 - 00:30:56
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Уважаемые!

Скажите пожалуйста, почему данный sql выбрасывает ошибку:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT articles.category, articles.id, articles.title, articles.publication, articles.author, articles.access, articles.add_date, categories.description FROM articles WHERE articles.category=:category LEFT JOIN categories ON articles.category=categories.id LIMIT 0,:lim_end

а в php для pdo соответственно впихиваю следующий массив:

При выводе ошибка SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens<br />/var/www/zk.net/www/cpanel/db/CPGoSQLDb.php on line 63
Т.е. ругается что не соответствуют количество параметров, но блин, их в запросе 2 и в массиве 2. Причем если убрать WHERE, то норм работает, значит проблема в нем. Видимо не туда вставил, тогда как?
 
 Top
KingStar
Отправлено: 18 Апреля, 2014 - 08:46:14
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)






после



а не после

CODE (SQL):
скопировать код в буфер обмена
  1. WHERE articles.category=:category


-----
То что программа работает, не означает что она написана правильно!
 
 Top
pro_xaoc
Отправлено: 18 Апреля, 2014 - 08:50:09
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




KingStar, я так пробовал
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT articles.category, articles.id, articles.title, articles.publication, articles.author, articles.access, articles.add_date, categories.description FROM articles LEFT JOIN categories ON articles.category=categories.id WHERE articles.category=:category LIMIT 0,:lim_end

все равно та же ошибка(
 
 Top
KingStar
Отправлено: 18 Апреля, 2014 - 08:58:42
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. LEFT JOIN categories ON categories.id = articles.category


-----
То что программа работает, не означает что она написана правильно!
 
 Top
pro_xaoc
Отправлено: 18 Апреля, 2014 - 09:05:22
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




условие WHERE я не могу убрать, т.к. именно это мне и нужно. А в чем смысл перестановки categories.id = articles.category? Хотя попробовал - ничего не дало.
 
 Top
DlTA
Отправлено: 18 Апреля, 2014 - 09:12:42
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




pro_xaoc пишет:
rticles.category =:
а что это за такое сравнение?
(Добавление)
pro_xaoc пишет:
LIMIT 0,:lim_end
и тут че за хрень?
 
 Top
pro_xaoc
Отправлено: 18 Апреля, 2014 - 09:23:58
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




DlTA, это не хрень, это именованные плейсхолдеры ... возможно проблему решил, тестирую ...
 
 Top
Мелкий Супермодератор
Отправлено: 18 Апреля, 2014 - 09:35:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DlTA пишет:
а что это за такое сравнение?

См. описание PDO::prepare
Удобнейшая вещь.

pro_xaoc, во-первых, перепроверьте, что ошибка именно там, где вы код редактируете. Перед непосредственно execure выведите и запрос и готовый массив параметров.
Так же, насколько помню, pdo некорректно подставляет данные для limit'а, если PDO::ATTR_EMULATE_PREPARES=true - а так оно стоит по-умолчанию. Но там ошибка будет уже sql, а не param number


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 18 Апреля, 2014 - 09:41:40
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Мелкий пишет:
См. описание PDO::prepare
Удобнейшая вещь.
проще говоря это не запрос а шаблон запроса?
 
 Top
pro_xaoc
Отправлено: 18 Апреля, 2014 - 09:52:56
Post Id


Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




DlTA, именно.
Мелкий, как вы и сказали, ошибку допустил в другом месте, в функции где выполняется execute. С limit я разобрался с конструкцией
PHP:
скопировать код в буфер обмена
  1. $res_query->bindValue(':lim_end', (int)$this->arrayParams[':lim_end'],PDO::PARAM_INT);
. Но теперь код SQL работает не так, как мне надо. Нужно вывести из таблицы articles только те, у которых category=<category>, которых я подставляю потом. Нижеприведенным кодом, возвращается пустой ответ:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT articles.category, articles.id, articles.title, articles.publication, articles.author, articles.access, articles.add_date, categories.description FROM articles LEFT JOIN categories ON articles.category=categories.id WHERE articles.category=:category LIMIT 0,:lim_end

Пробовал еще так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT articles.category, articles.id, articles.title, articles.publication, articles.author, articles.access, articles.add_date, categories.description FROM articles LEFT JOIN categories ON articles.category=categories.id AND articles.category=:category LIMIT 0,:lim_end

в таком случае возвращается все материалы и еще, значение category.description - NULL.
Не пойму, почему так ...
(Добавление)
Пардон, снова моя ошибка Радость В общем, спасибо за участие Подмигивание

(Отредактировано автором: 18 Апреля, 2014 - 09:54:15)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB