Сторінка 1 з 1

Вопрос по PHP+MySQL

Додано: 8.6.11 11:07
lach
Кто-то может проверить...
Суть прикола:

Код: Виділити все

mysql> set @LN = 'lach'; select ID, FIRSTNAME from TT_USER where LOGIN=@LN\g Query OK, 0 rows affected (0.00 sec) +----+--------------------+ | ID | FIRSTNAME | +----+--------------------+ | 1 | Святослав | +----+--------------------+ 1 row in set (0.00 sec)
не работает в PHP если используем MySQL-переменные (@xxx).

Можете у себя проверить?

З.Ы,
Зачем нужно - в файлах лежат унифицированные SQL-запросы.
Код, по-факту, переопределяет значения переменных, потом выполняется шаблонный запрос считанный из файла.
При использовании mysql_query() выдается ошибка на синтаксис, мол не понимает все что до select...

Re: Вопрос по PHP+MySQL

Додано: 8.6.11 12:07
Vick
Не, так просто не катит :)
Для этого нужно делать prepare и bind, но, насколько я помню, стандартная либа с функциями mysql_* не поддерживает такого.
Тебе нужно использовать что-то другое, например экстеншен mysqli или PDO..

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

Re: Вопрос по PHP+MySQL

Додано: 8.6.11 13:56
lach
Спсб. Кто-то может родить работоспособную "козу", аналогичную поставленной задаче?
На том же mysqli... Примеры которые на сайте - они написаны с точки зрения подстановки значений, но "SQL запрос" там тоже 1...

Re: Вопрос по PHP+MySQL

Додано: 8.6.11 17:08
Lone Wolf
Не совсем понял зачем mysql переменные?
Что-то типа такого не подоходит?

Код: Виділити все

$sql = sprintf("select ID, FIRSTNAME from TT_USER where LOGIN='%s'","lach"); mysql_query($sql);

Re: Вопрос по PHP+MySQL

Додано: 8.6.11 20:44
lach
Вулф, перефразирую... Если MySQL поддерживает функции на стороне сервера, а PHP не поддерживает несколько утверждений (statements) в рамках 1 SQL-запроса - как выкручиваются?!
Ранее данная фигня работала, правда с MSSQL... MSSQL драйвер в PHP поддерживает последовательность команд в рамках одного запроса.

10 лет назад MySQL НЕ поддерживал ни вложенных запросов, ни функций... Сейчас он оброс конфетками от коммерческих СУБД, а один из самых популярных интерпретаторов (PHP) типа не поддерживает этот функционал...
Это мой ход мыслей и вероятно он ошибочный. Потому что либо есть возможность выкрутиться, либо веб-программисты используют методы 10 летней давности и нифига не используют нововведений в MySQL.

Была озвучена мысль чтобы устанавливать перманентное соединение и выполнять последовательность запросов, не обрататывая ответ...

Скорей всего кто-то же юзает server-side функции :)

Ну же, мысли в студию!
Тут же свора дизайнеров и веб-программистов :)
Студенты на крайняк!

Re: Вопрос по PHP+MySQL

Додано: 8.6.11 22:47
Lone Wolf
1. Запроса выполняется два,а не один. точка запятая делиметер - запросов. Вы можете там хоть 10 штук написать это будет 10 отдельных запросов.
2. mysql_query() sends a unique query (multiple queries are not supported) to the currently active database on the server that's associated with the specified link_identifier.

Посему нужно отосылать два подряд mysql_query() и перманетное сойдениние тут не к чему. Текущее сойденине живо пока не отработает весь скрипт.
Также можно использывать транзакции, если таблицы innoDB..

Также в случае innoDB можно зранимую процедуру создать, и вызвать ее одним запросом, но в данной задаче они лишняя..

Re: Вопрос по PHP+MySQL

Додано: 9.6.11 19:35
lach
Вульф, а поподробнее про транзакции и Inno DB можешь краткую лекцию озвучить :)))
Кстати, не пробовал а сейчас немного другим занят... MySQL процедуры в БД сохраняет перманентно?

Re: Вопрос по PHP+MySQL

Додано: 9.6.11 21:57
Lone Wolf
Вульф, а поподробнее про транзакции и Inno DB можешь краткую лекцию озвучить :)))
Кстати, не пробовал а сейчас немного другим занят... MySQL процедуры в БД сохраняет перманентно?
Кончено постоянно вот почитай http://dev.mysql.com/doc/refman/5.1/en/ ... edure.html
Краткая выдержка

Код: Виділити все

mysql> CREATE FUNCTION hello (s CHAR(20)) mysql> RETURNS CHAR(50) DETERMINISTIC -> RETURN CONCAT('Hello, ',s,'!'); Query OK, 0 rows affected (0.00 sec) mysql> SELECT hello('world'); +----------------+ | hello('world') | +----------------+ | Hello, world! | +----------------+ 1 row in set (0.00 sec)
т.е. когда создашь достаточно одно запроса mysql_query('SELECT hello("world")') ну и дальше по стандарту.. хотя с такими процедурами(что возращают что-то) я не работал

насчет транзакций.. фишка в том, что это обычная последовательность нескольких запросов, НО если хотя бы один неотработал или отрабтал с ошибкой, или еще что-то произошло, то можна откатить все превыдущее изменения..
т.е. транзакция єто последовательность операций, что представляет собой некую атомарную еденицу
вот кусок кода

Код: Виділити все

mysql_query('START TRANSACTION'); foreach($sql as $st) { mysql_query($st); if(mysql_errno()!=0) { mysql_query('ROLLBACK'); return FALSE; } } mysql_query('COMMIT'); return true;
это уместно при INSERT-UPDATE запросах
в моем случае, это было создание нескольких связаных между собой по ключу, записей в нескольких таблицах. При чем они обязаны были существовать все три.
так вот, как видно в случае неудачи на каком-то жтапе, я откатывал все вставки.

Re: Вопрос по PHP+MySQL

Додано: 10.6.11 10:26
J A Z Z
и зачем я в эту тему зашел...

Re: Вопрос по PHP+MySQL

Додано: 10.6.11 10:28
Anton_gotos
и зачем я в эту тему зашел...
тоже призадумался, что я здесь делаю :duma:

Re: Вопрос по PHP+MySQL

Додано: 10.6.11 15:04
Muton
Аж прям комплекс неполноценности проявился. Я в школе на информатике простейший алгоритм изобразить не смог. :gerl:

Re: Вопрос по PHP+MySQL

Додано: 10.6.11 15:43
Vick
Лач, ты или троллишь, или тебя в гугле забанили!... #diablo

Re: Вопрос по PHP+MySQL

Додано: 10.6.11 23:04
lach
Вулф, спасибо за примеры! :)


Вик, не троллю, просто тут коллективный разум гораздо эффективнее :)
Да и время дико экономит :)

Re: Вопрос по PHP+MySQL

Додано: 13.6.11 20:27
Lone Wolf
Вик, не троллю, просто тут коллективный разум гораздо эффективнее :)
Да и время дико экономит :)
Согласен, только все-таки форум не профильный.
я обычно по таким воросам на коденет.ру консультируюсь )