Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Запрос PDO
Snnick  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42681
На форуме: 8 месяцев, 19 дней
Карма:




Всем привет! Делаю свой второй проект на MVC, ранее пользовался обычными запросами к базе данных, но решил освоить PDO. Пытаюсь реализовать поиск(сортировку) по сайту Сделал запрос PDO для сортировки по значению которое приходит с $_POST . Запрос не работает. Подскажите пожалуйста где я допустил ошибку?


public static function getSearchAll()
{
// Соединение с БД
$db = DB::getConnection();
$options['last_name'] = $_POST['last_name'];
$options['first_name'] = $_POST['first_name'];
$options['phone'] = $_POST['phone'];
$options['department_id'] = $_POST['department_id'];
$options['country_id'] = $_POST['country_id'];
$options['city_id'] = $_POST['city_id'];
$options['education_id'] = $_POST['education_id'];
$options['man_wuman_id'] = $_POST['man_wuman_id'];
$options['position_id'] = $_POST['position_id'];
$options['family_id'] = $_POST['family_id'];
$options['smok_id'] = $_POST['smok_id'];
$options['cabinet_id'] = $_POST['cabinet_id'];

// Текст запроса к БД
$sql = "SELECT * FROM person
JOIN department AS d ON p.department_id = d.id
JOIN position AS po ON p.position_id = po.id
WHERE
(:last_name = NULL OR last_name = :last_name) AND
(:first_name = NULL OR first_name = :first_name) AND
(:phone = NULL OR phone = :phone) AND
(:department_id = 0 OR department_id = :department_id) AND
(:country_id = 0 OR country_id = :country_id) AND
(:city_id = 0 OR city_id = :city_id) AND
(:education_id = 0 OR education_id = :education_id) AND
(:man_wuman_id = 0 OR man_wuman_id = :man_wuman_id) AND
(:position_id = 0 OR position_id = :position_id) AND
(:family_id = 0 OR family_id = :family_id) AND
(:smok_id = 0 OR smok_id = :smok_id) AND
(:cabinet_id = 0 OR cabinet_id = :cabinet_id)

"
;

// Получение и возврат результатов. Используется подготовленный запрос
$result = $db->prepare($sql);
$result->execute([':last_name' => $options['last_name'],
':first_name' => $options['first_name'],
':phone' => $options['phone'],
':department_id' => $options['department_id'],
':country_id' => $options['country_id'],
':city_id' => $options['city_id'],
':education_id' => $options['education_id'],
':man_wuman_id' => $options['man_wuman_id'],
':position_id' => $options['position_id'],
':family_id' => $options['family_id'],
':smok_id' => $options['smok_id'],
':cabinet_id' => $options['cabinet_id']]);

return $result->fetchAll(\PDO::FETCH_OBJ);
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1355
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 4 дня
Карма: 77




я не знаю PDO, но глянул мануал. И сомневаюсь что ...
(:last_name = NULL OR last_name = :last_name) AND
тут должно сравниваться значение с NULL . то есть должно быть так. И далее по тексту
(last_name IS NULL OR last_name = :last_name) AND
.
И портянки знатные конечно. можно же вот так сделать:
$array = [
'last_name', 'first_name', 'phone', 'department_id', 'country_id', 'city_id',
'education_id', 'man_wuman_id', 'position_id', 'family_id', 'smok_id', 'cabinet_id'
];

$execute = [];
foreach ($array AS $value){
if (isset($_POST[$value]))
$execute[':'.$value] = $_POST[$value];
}

// проверка что все значения переданы
if (count($array) != count($execute))
die('Не все значения переданы');

$sql = "тут запрос";

$result = $db->prepare($sql);
$result->execute($execute);


Это сообщение отредактировал Kusss - 23.08.2016 - 22:33
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




Snnick
А зачем:
':phone' => $options['phone'],
Почему бы сразу не:
':phone' => $_POST['phone'],
?


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Гость_killer8080  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (Snnick @ 23.08.2016 - 15:54)
SELECT * FROM person
            JOIN department AS d ON p.department_id = d.id

alias p не объявлен
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Snnick  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 42681
На форуме: 8 месяцев, 19 дней
Карма:




Спасибо всем. Разобрался, там с $_Post в переменных 'last_name', 'first_name', 'phone' приходил не NULL, а пустота, из за этого не работал запрос.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса