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

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

12.07.2013, 19:18. Показов 1129. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru