Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611

Правильный запрос

12.07.2013, 19:18. Показов 1137. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!
Мне здесь в другой теме когда-то писали, что при использовании PDO:: prepare и PDOStatement::execute напрямую подставлять не стоит, лучше делать так:
PHP
1
2
3
4
5
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
.
Вот у меня есть код массивный, и там я подставляю напрямую. Как по другому сделать не пойму( сразу говорю пытался...только ничего путного не получалось((()
PHP
1
2
3
4
$query = $db_connect->prepare("INSERT INTO `directory` (`id`, `audit`, `name`, 
    `post_address`, `home_phone`) VALUES (NULL, '".$audit."', '".$name."', '".$post_address."', 
    '".$home_phone."')");
    $query->execute();
как мне в данном случае поступить?
Заранее благодарен за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.07.2013, 19:18
Ответы с готовыми решениями:

Не правильный запрос
Почему Mysql ругается на этот запрос и не принимает его? #1064 - You have an error in your SQL syntax; check the manual that...

Правильный запрос
В общем вот такая вот беда. Написал авторизацию , вроде бы работает корректно , но не в этом суть . Имеется таблица users(поля...

Правильный запрос к базе
Всем привет. Не могу сообразить, как продолжить запрос к базе. Смысл запроса: Есть форма входа и пользователь, который записан в...

11
 Аватар для zhibirc
651 / 236 / 77
Регистрация: 18.02.2013
Сообщений: 784
13.07.2013, 16:23
/!\ мощь Prepared Statements именно в placeholders, а не в их неиспользовании
PHP
1
2
3
4
# безымянные placeholders
$data = array(NULL, 'Audit', 'Name', 'Past Address', 'Home phone');
$query = $db_connect->prepare(INSERT INTO directory (id, audit, name, post_address, home_phone) VALUES (?, ?, ?, ?, ?));
$query->execute($data);
0
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
14.07.2013, 22:02  [ТС]
в
PHP
1
$data = array(NULL, 'Audit', 'Name', 'Past Address', 'Home phone');
вместо 'Audit' писать
PHP
1
$audit
?

PHP
1
2
3
4
# безымянные placeholders
$data = array(NULL, 'Audit', 'Name', 'Past Address', 'Home phone');
$query = $db_connect->prepare(INSERT INTO directory (id, audit, name, post_address, home_phone) VALUES (?, ?, ?, ?, ?) WHERE id = ?);
$query->execute($data, array($id));
а так можно делать? или надо в массив $data дописать в конце $id?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
14.07.2013, 22:21
а почитать про метод нельзя? У него только один необязательный аргумент.
PHP
1
$query->execute( array_merge($data, array($id)) );
P.S. использовать константные значения через плэйсхолдеры, имхо, глупо.
0
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
14.07.2013, 22:53  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
P.S. использовать константные значения через плэйсхолдеры, имхо, глупо.
Если на прямую нельзя/глупо, через плэйсхолдеры тоже не очень, то как тогда?

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
а почитать про метод нельзя?
я читал. Мне не все понятно на PHP.NET, поэтому как что не понятно я сюда иду. К тому же я лучше все понимаю наглядно на практике, чем в теории(такой уж я уродился:)), а всякие выражения я тоже понять сразу не могу...(( например, про array_merge я только щас узнал) кстати спасибо:) как видно полезная штучка

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
14.07.2013, 23:00
на прямую не рекомендуется динамические данные подставлять. Если они у вас константные (т.е., не из переменной, а как в примере - при объявлении массива забиты константные значения), то смысла с использования плэйсхолдеров нет совершенно никакого.

Добавлено через 3 минуты
Цитата Сообщение от Divil Посмотреть сообщение
я читал. Мне не все понятно на PHP.NET
в самом начале написано
Code
1
bool PDOStatement::execute ([ array $input_parameters ] )
код значение
bool тип возвращаемого значения (boolean)
PDOStatement::execute имя класса и его метода (причем :: не означает, что метод статический. Если он статический, то так и пишут)
[ ... ] все внутри квадратных скобок - необязательные аргументы
array $... необходимый тип передаваемого аргумента
$input_parameters название передаваемого аргумента (локальное, внутри метода, вы можете называть его как угодно).

Что здесь непонятного?
1
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
15.07.2013, 14:41  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
в самом начале написано
Ну там же не написано что только 1 массив можно? но теперь буду знать)
ну щас вроде понятно....с данным массивом...
Цитата Сообщение от KOPOJI Посмотреть сообщение
на прямую не рекомендуется динамические данные подставлять. Если они у вас константные (т.е., не из переменной, а как в примере - при объявлении массива забиты константные значения), то смысла с использования плэйсхолдеров нет совершенно никакого.
а что такое плэйсхолдер?
ну вот в ниже указанном случае как поступить?
PHP
1
2
3
4
5
6
7
8
9
$query = $db_connect->prepare("SELECT * FROM `directory` WHERE `id_dir` = ?");
    $query->execute(array($num));
    $search = $query->fetch(PDO::FETCH_ASSOC);
$audit = $search['audit'];
    $name = $search['name'];
    $post_address = $search['post_address'];
$query = $db_connect->prepare("UPDATE `directory` SET `audit` = '".$audit."', `name` = '".$name."', 
        `post_address` = '".$post_address."' WHERE `id_dir` = ? AND `color` = ?");
        $query->execute(array($num, 1));
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.07.2013, 19:01
"динамически изменяемые" данные (есть возможность их изменить, т.к. в переменную $name можно записать другое значение):
PHP
1
2
$name = '....';
echo $name;
константа (нет возможности изменить):
PHP
1
echo '....';
Так разницу понятнее..?
0
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
15.07.2013, 19:31  [ТС]
PHP
1
$audit = $search['audit'];
является "динамически изменяемыми" данными, так? Если так, то понятно)
Тогда получается что данный код:
PHP
1
2
3
4
5
6
7
8
9
$query = $db_connect->prepare("SELECT * FROM `directory` WHERE `id_dir` = ?");
    $query->execute(array($num));
    $search = $query->fetch(PDO::FETCH_ASSOC);
$audit = $search['audit'];
    $name = $search['name'];
    $post_address = $search['post_address'];
$query = $db_connect->prepare("UPDATE `directory` SET `audit` = '".$audit."', `name` = '".$name."', 
        `post_address` = '".$post_address."' WHERE `id_dir` = ? AND `color` = ?");
        $query->execute(array($num, 1));
не целесообразно использовать, так?
И если так, то как мне поступить?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
15.07.2013, 20:01
именно. А вот если там константные значения, как вот здесь (т.к. жестко прописано "Audit", "Name" и т.п.)
Цитата Сообщение от Divil Посмотреть сообщение
PHP
1
$data = array(NULL, 'Audit', 'Name', 'Past Address', 'Home phone');
то смысла с использования плэйсхолдеров нет.
Цитата Сообщение от Divil Посмотреть сообщение
И если так, то как мне поступить?
как раз "забить" переменные в массив и подставлять с помощью execute
1
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
15.07.2013, 21:16  [ТС]
А, все понял, спасибо!
и такой вопросик, обработка данных нужно делать?(и если нужно то какие?)
0
8 / 8 / 10
Регистрация: 11.04.2012
Сообщений: 611
20.07.2013, 20:12  [ТС]
а вот есть такой поисковый запрос
PHP
1
2
3
 $query = $db_connect->prepare("SELECT * FROM `directory` WHERE name LIKE '%".$s."%' 
        OR sex LIKE '%".$s."%' ... LIMIT 200");
    $query->execute()
здесь можно как то упростить? или здесь по другому надо делать запрос?
я сам попробовал в execute подставить
PHP
1
array($s, $s...$s)
ну и вместо
PHP
1
'%".$s."%'
подставил ?
но либо ошибки выдавал, либо не правильно искал...
Может кто что посоветовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2013, 20:12
Помогаю со студенческими работами здесь

Сформировать правильный запрос
здравствуйте уважаемые форумчане, дело вот в чем, есть таблицы page и page2 в mysql с одинаковыми полями, я сделал перенос строки по клику...

Не правильный запрос в MySQL
Вот сам запрос $query = &quot;SELECT * FROM `items` WHERE `amount`&gt;0 DESC&quot;; Работает если убрать DESC. Если он стоит выводит ошибку Вот...

Правильный запрос SQL
Здравствуйте, помогите создать правельный SQL запрос. Есть таблица с заказами, каждый заказ имеет повторяющийся order.id_order. На...

Правильный SQL запрос на поиск
Приветствую всех! // подключение к бд $db_connect = new PDO('mysql:dbname=table;host=localhost', 'root', ''); // получаем...

Как сделать правильный запрос к бд mysql?
Такая задача - некоторые из пользователей назначаются ответственными за определенную дисциплину определенного учебного плана. То есть,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru