Двe sql команды за один запрос

123
Aisamiery
На сайте с 12.04.2015
Offline
293
#11
Sitealert:
Это смотря по тому, что и как должно работать. Как отметил ivan-lev, для мультизапроса предусмотрена специальная функция,

Вы где то у ТС нашли описание ЯП? Мультизапрос? У ТС в стартовом посте просто 2 SQL запроса, которые любой клиент БД может передать за раз если между ними стоит ; представим что ТС использует консольную утилиту mysql, о каких функциях мультизапроса речь?

Sitealert:
а тот вариант, который написал Aisamiery, работать не должен. Метод query поддерживает только один запрос.

извините, метод query чего поддерживает только один запрос? Я привел пример абстрактный коня в вакууме как передать 2 запроса за один вызов, если мы возьмем абстрактно какой то вызов единственного запроса который возвращает результат, то всё равно метод будет работать, только вернёт (скорее всего) результат последнего запроса.

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
S
На сайте с 30.09.2016
Offline
469
#12
Aisamiery:
Вы где то у ТС нашли описание ЯП?

Именно про это я и написал:

Sitealert:
Про какое-то "окно", в которое ТС что-то вставляет, я вообще не понял.
И вообще большой вопрос, нафига всё это нужно для ТС.
И в этой связи довольно странны видеть какие-то конкретные советы вместо попытки уточнить предмет обсуждения.
Aisamiery:
извините, метод query чего поддерживает только один запрос? Я привел пример абстрактный коня в вакууме как передать 2 запроса за один вызов

На этом "коне в вакууме" написаны конкретные букаффки, и по умолчанию это подразумевает метод mysqli::query, который мультизапросов не поддерживает, и если ТС вставит это в стандартную конструкцию многих популярных CMS, которая выглядит именно так, то результат не совпадёт с ожиданиями. Поэтому это называется "морочить людям голову".

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
Aisamiery
На сайте с 12.04.2015
Offline
293
#13

Sitealert, чушь какую то несёте невнятную, какие то cms, какие то ожидания от двух инсертов. Если вы вставите в mysqli::query два insert запроса через точку с запятой, вы получите именно то что ожидаете.

вот вам ссылка на ваши мультизапросы

И описания к ним:

Отдельные SQL-предложения в мультизапросе отделяются точкой с запятой.

Это то что я и сказал.

И там же приписка:

Отдельная API-функция для мультизапросов позволяет снизить вероятность случайных SQL-инъекций.

И это вся разница, ну и более адекватные результаты можно получить, но это при select, при инсертах всё равно по сути

S
На сайте с 30.09.2016
Offline
469
#14

Aisamiery, завязывай чушь нести. Надоел. Почитай повнимательнее по своей же ссылке, я тут тебе ничем не могу помочь.

iworkshop
На сайте с 22.12.2008
Offline
195
#15

Sitealert, справедливости ради, не факт что указанный Aisamiery "конь в вакууме" не сработает.

Это зависит от того, какой драйвер БД использует DLE,

Если mysqli - то таки да, засада, false и ошибка синтаксиса.

А вот если PDO с простым query или exec - то нежданчик, они прекрасно пропускают мультизапросы без каких либо ошибок в разные таблицы. Сам удивился((

И да, посмотрел, DLE использует драйвер mysqli а метод query там обычный mysqli_query который таких чудес не пропустит. Но есть ход конём. В DLE есть ещё и метод multi_query использующий mysqli_multi_query.

Так что ТС если вместо:

$db->query("INSERT INTO one ... ; INSERT INTO two"); 

будет

$db->multi_query("INSERT INTO one ... ; INSERT INTO two"); 

Должно работать.

XMLRiver - прямая выдача Google и Яндекс через API
S
На сайте с 30.09.2016
Offline
469
#16
iworkshop:
если вместо:
$db->query("INSERT INTO one ... ; INSERT INTO two"); 

будет
$db->multi_query("INSERT INTO one ... ; INSERT INTO two"); 

Должно работать.

Именно об этом я и написал выше. И задал вопрос, проверил ли Aisamiery своё предложение. И естественно, что можно создать свой класс $db с любыми методами, но это надо оговаривать. Но ТС, похоже, вообще не понимает, о чём здесь разговор. Судя по "вставил в окно". И в связи с этим, вообще непонятно, нафига он этот топик создал.

Как всегда – один замутит тему и свалит, а другие устроят тут срач на десяток страниц.

iworkshop
На сайте с 22.12.2008
Offline
195
#17
Sitealert:
Именно об этом я и написал выше. Но ТС, похоже, вообще не понимает, о чём здесь разговор. Судя по "вставил в окно". И в связи с этим, вообще непонятно, нафига он этот топик создал.
Как всегда – один замутит тему и свалит, а другие устроят тут срач на десяток страниц.

Это да, уже не раз видел такое тут или на киберфоруме. Но видимо не так нужен ответ или сам нашёл устраивающее его решение. Мне без разницы, разминка для ума полезна и сама по себе. Я вот не знал что PDO пропускает мультизапросы при простых query\exec (

S
На сайте с 30.09.2016
Offline
469
#18
iworkshop:
Я вот не знал что PDO пропускает мультизапросы при простых query\exec (

Даже не задумывался об этом. Потому что не использую мультизапросы. По причине ненадобности. ;)

То есть вообще не понимаю, на кой ляд они нужны, кроме какой-то сомнительной экономии времени на передачу запросов.

Но ТС смылся без объяснения причин такой необходимости. :(

IL
На сайте с 20.04.2007
Offline
435
#19
ivan-lev:
Если драйвер поддерживает соответствующую опцию (к примеру, "multy query" в mysqli https://www.php.net/manual/en/mysqli.multi-query.php или PDO),

Поддерживает.. Но могут быть нежданчики, если, к примеру, из трёх запросов второй выполнится с ошибкой.. 😂

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

iworkshop:
Это да, уже не раз видел такое тут или на киберфоруме.

Есть мнение, что это (как и некоторые другие.. в т.ч. и слегка провокационные) пapтизанskая деятельность для поддержания жизни на форуме..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Aisamiery
На сайте с 12.04.2015
Offline
293
#20
iworkshop:
Это зависит от того, какой драйвер БД использует DLE,

Вы слишком далеко копаете. Вот лично я не стал вникать что использует ТС и для чего ему это, а ответил сразу на ряд вопросов в том числе и транзакции, так как не совсем было понятно что ТС хочет. На что ТС сказал спасибо и что это действительно работает.

Зачем тут начали копать про PHP, DLE и вообще всю эту бесполезную демагогию - непонятно. Я привёл коня в вакуме на php чисто потому, что это для меня основной ЯП и мне привычнее написать в его синтаксисе, я мог так же написать коня в вакуме в таком синтаксисе:


connection.query("INSERT INTO one... ; INSERT INTO two", handler);

Ведь прежде всего этот синтаксис поддерживается именно сервером БД, а кто его туда протолкнёт вопрос уже вторичен. Я же отвечал по стандартному SQL синтаксису, я не гадаю на кофейной гуще что там у людей за бэкграунд и в каких условиях что надо использовать. (PS DLE даже в глаза не видел, а ТС может юзает mysql из консоли)

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий