|
|
|
| Доброе время суток уважаемые господа. В общем есть вот такой простой Select, и он должен работать но почему то не работает, и я не знаю где ошибка. Другие такие же запросы у меня работают но вот как пришлось применить Limit, дело не заработало.
$data = array('id_topic_list' => $id_topic_list,'part' => $part,'part2' => $part2);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->execute($data);
|
А вот код то что ниже уже работает, но мне больше нравится стиль с массивом, в чем ошибка скажите плиззз. И ещё хотелось бы знать в чем принципиальная разница этих двух подходов, и какой из них в принципе лучше. Если нечем, то первый короче чем 2 однозначно.
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->bindParam(':id_topic_list', $id_topic_list, PDO::PARAM_INT);
$STH->bindParam(':part', $part, PDO::PARAM_INT);
$STH->bindParam(':part2', $part2, PDO::PARAM_INT);
$STH->execute();
|
| |
|
|
|
|
|
|
|
для: hk416
(09.11.2012 в 00:16)
| | Лично я вообще PDO не пользуюсь, но если смотреть в ман, то похоже ваш первый вариант должен выглядеть так:
<?php
$data = array( ':id_topic_list' => $id_topic_list
, ':part' => $part
, ':part2' => $part2
);
$sql = 'SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2';
$STH = $DBH->prepare( $sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) );
$STH->execute($data);
| проверьте, и найдите 2 принципиальных отличия =) | |
|
|
|
|
|
|
|
для: Sfinks
(09.11.2012 в 11:40)
| | Дело вот в чем, ваш вариант я уверен что работает, но это скорее вариация с массивом 2-го варианта. А я хочу код то что ниже который работает только с лимитом. Прошерстил инет, народ жалуется на лимит в этом случае, но ответов нету. Благо вариант с биндом работает.
$data = array('id_topic_list' => $id_topic_list);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list");
$STH->execute($data);
|
| |
|
|
|
|
|
|
|
для: hk416
(09.11.2012 в 14:37)
| | В первую очередь, у вас названия ключей в массиве не правильные.
'id_topic_list' и ':id_topic_list'
Есть разница? | |
|
|
|
|
|
|
|
для: Sfinks
(09.11.2012 в 16:38)
| | Да это синтаксис такой в PDO, вот пример
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
$STH->execute($data);
|
ну и вот по аналогии тоже самое работает, но без лимита, специально ещё раз проверил
$data = array('id_topic_list' => $id_topic_list);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list");
$STH->execute($data);
$STH->setFetchMode(PDO::FETCH_ASSOC);
|
Вот ссылочка с примерчиками http://habrahabr.ru/post/137664/
Правда вот ещё примеры нашел на другом сайте http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers тут уже как вы выше писали, но и так и так работает.
$stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:field5)");
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5));
$affected_rows = $stmt->rowCount();
|
Проверил вот так, жаль не пашет (((( Одно радует есть другой способ и он работает.
$data = array(':id_topic_list' => $id_topic_list,':part' => $part,':part2' => $part2);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->execute($data);
|
| |
|
|
|
|
|
|
|
для: hk416
(09.11.2012 в 17:01)
| | Либо лыжи не едут, либо я....
А в чем разница между вашим самым первым листингом, который вы хотели, чтоб заработал, и самым последним, который работает?
Не в том ли, что в первом ключи массива не правильные, а в последнем правильные?
Или вы хотите чтобы работало вопреки ману? | |
|
|
|
|
|
|
|
для: Sfinks
(09.11.2012 в 20:43)
| | А в чем разница между вашим самым первым листингом, который вы хотели, чтоб заработал, и самым последним, который работает?
Не в том ли, что в первом ключи массива не правильные, а в последнем правильные?
Самый последний листинг он не работает!!!Вот он ниже
$data = array(':id_topic_list' => $id_topic_list,':part' => $part,':part2' => $part2);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->execute($data); // ЭТОТ КОД НЕ РАБОТАЕТ !!!!!!!!!!!!!!
|
$data = array('id_topic_list' => $id_topic_list,'part' => $part,'part2' => $part2);
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->execute($data); // ЭТОТ КОД ТОЖЕ НЕ РАБОТАЕТ !!!!!!!!!!!!!!
|
Не тот не другой вариант не работает, а по-моему должен, тем более в одном источнике есть двоеточия в массиве, во втором нет. Но благо есть вариант ниже и он точно работает.
$STH = $DBH->prepare("SELECT * FROM list_discussions WHERE id_topic_list= :id_topic_list LIMIT :part,:part2");
$STH->bindParam(':id_topic_list', $id_topic_list, PDO::PARAM_INT);
$STH->bindParam(':part', $part, PDO::PARAM_INT);
$STH->bindParam(':part2', $part2, PDO::PARAM_INT);
$STH->execute(); // ЭТОТ КОД РАБОТАЕТ !!!!!!!!!!!!!!
|
Но я все таки хочу обратить ваше внимание на тот факт, что те 2 куска кода отличающиеся двоеточиями, отлично работают без лимита, и не работают с Лимитом. А примера такого какой я хочу в нете не нашел. | |
|
|
|
|
|
|
|
для: hk416
(09.11.2012 в 22:13)
| | Аналогичная проблема, Вы разобрались почему в Limit не работает? | |
|
|
|
|
|
|
|
для: tima2010
(07.12.2012 в 16:04)
| | Он работает, но только если использовать вот такой синтаксис
$STH = $DBH->prepare("SELECT * FROM discussion WHERE id_list_discussions=:id_list_discussions LIMIT :part, :part2");
$STH->bindParam(':id_list_discussions', $id_list_discussions, PDO::PARAM_INT);
$STH->bindParam(':part', $part, PDO::PARAM_INT);
$STH->bindParam(':part2', $part2, PDO::PARAM_INT);
$STH->execute();
|
Так и пишите если нужен Limit, вот и всё. | |
|
|
|
|