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

> Проверка на поддержку транзакций.
twin  
 ۩  Дата
Цитировать сообщение

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 21 день
Карма: 303

Трезвый :
6 лет, 5 месяцев, 30 дней


Нарвался на задачу. Мне нужно проверить, поддерживается ли транзакция текущим движком.

PDO бросает эксепшен только если транзакция не поддерживается драйвером. А вот такая шняга пролазит на ура :) Если таблица MyISAM :

$pdo->startTransaction();

$dbh->exec("DROP TABLE `table`");

$pdo->rollback();


Как сие предотвратить? Вернее мне не предотвратить надо, а предупредить, что транзакция текущим движком не поддерживается.

Можно было бы (ресурс тут не важен) сделаь проверку. К примеру запрос
SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = 'table'
покажет то что надо - текущий тип. Но для этого нужно знать имя таблицы. А его нет, есть только текст запроса. Парсить его из запроса не вариант. Там могут и join быть, и union, и бог весть что.

Мож есть мысли у кого, пока я голову грею? :)


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

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



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2371
Пользователь №: 27172
На форуме: 6 лет, 2 месяца, 22 дня
Карма: 76




twin
Цитата
Но для этого нужно знать имя таблицы.

А если взять список всех таблиц и для всех проверить и закешировать результат, а потом предупреждать?


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

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




******

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

Трезвый :
7 лет, 9 месяцев, 30 дней


Цитата (twin @ 18.03.2017 - 10:06)
Но для этого нужно знать имя таблицы. А его нет, есть только текст запроса. Парсить его из запроса не вариант. Там могут и join быть и union и бог весть что.

А вот был бы квери билдер...

user posted image


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

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



Пофигист
******

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




Что есть "текущий движок"?


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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3691
Пользователь №: 38635
На форуме: 3 года, 5 месяцев, 27 дней
Карма: 195




Цитата (S.Chushkin @ 18.03.2017 - 12:17)
Что есть "текущий движок"?

Свернутый текст
user posted image


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 21 день
Карма: 303

Трезвый :
6 лет, 5 месяцев, 30 дней


Цитата (Arh @ 18.03.2017 - 06:24)
А если взять список всех таблиц и для всех проверить и закешировать результат, а потом предупреждать?
Мне не надо для всех. Мне надо для тех, что в текущем запросе.
Цитата (Invis1ble @ 18.03.2017 - 09:57)
А вот был бы квери билдер...
Не поверишь, но именно его я и делаю biggrin.gif Решил немного поковырять свой фреймворк. А так я даже и представить не могу, для чего еще нужна была бы такая надобность. Да и с билдером тоже бяда. Я сейчас изучил этот предмет изнутри во всех тонкостях и понял совершеннейшую глупость этой затеи. Когда закончу, поделюсь мыслями, их есть у меня. smile.gif
Цитата (S.Chushkin @ 18.03.2017 - 10:17)
Что есть "текущий движок"?
Имеется ввиду тип таблицы, к которой данный запрос.



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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

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



Пофигист
******

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




Цитата
Имеется ввиду тип таблицы, к которой данный запрос.


Цитата (twin @ 18.03.2017 - 10:06)
...есть только текст запроса. Парсить его из запроса не вариант.

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


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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 21 день
Карма: 303

Трезвый :
6 лет, 5 месяцев, 30 дней


Блин, я загнался. Можно распарсить. И очень просто. Я чет не подумал о том, что запросам SELECT пофиг транзакции. Остается INSERT, UPDATE, DELETE, DROP и TRUNCATE. А это семечки. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

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



Пофигист
******

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




Цитата (twin @ 18.03.2017 - 10:06)
Если таблица MyISAM :

$pdo->startTransaction();

$dbh->exec("DROP TABLE `table`");

$pdo->rollback();


Кстати, многие CREATE, ALTER и пр. в mySQL делают неявный COMMIT.
https://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html
Это так, для справки.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

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



Пофигист
******

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




Цитата (twin @ 18.03.2017 - 16:17)
Я чет не подумал о том, что запросам SELECT пофиг транзакции. Остается INSERT, UPDATE, DELETE, DROP и TRUNCATE. А это семечки. smile.gif

UPDATE, например, тоже JOIN-ы имеют wink.gif


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

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




******

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

Трезвый :
7 лет, 9 месяцев, 30 дней


... и селекты в транзакции завернуть можно biggrin.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 21 день
Карма: 303

Трезвый :
6 лет, 5 месяцев, 30 дней


Цитата (S.Chushkin @ 18.03.2017 - 12:18)
UPDATE, например, тоже JOIN-ы имеют

Ну да. Забыл про них, спасибо. Добавим, не проблема.
Цитата (Invis1ble @ 18.03.2017 - 12:45)
... и селекты в транзакции завернуть можно
А это мне не важно. Чем селект в транзакции навредить может? smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 264
Пользователь №: 26735
На форуме: 6 лет, 3 месяца, 16 дней
Карма: 15




Цитата (twin @ 18.03.2017 - 06:06)
PDO бросает эксепшен только если транзакция не поддерживается драйвером. А вот такая шняга пролазит на ура  :)  Если таблица MyISAM :

$pdo->startTransaction();

$dbh->exec("DROP TABLE `table`");

$pdo->rollback();

Начать с чтения мануала я думаю.

1. не существует метода PDO::startTransaction. http://php.net/manual/en/class.pdo.php
2. DROP/CREATE делают неявный коммит http://php.net/manual/en/pdo.begintransaction.php
Цитата

Some databases, including MySQL, automatically issue an implicit COMMIT when a database definition language (DDL) statement such as DROP TABLE or CREATE TABLE is issued within a transaction. The implicit COMMIT will prevent you from rolling back any other changes within the transaction boundary.

3. PDO кидает эксепшен не потому что транзакция не поддерживается, а потому что пытаются откатить неактивную транзакцию. http://php.net/manual/en/pdo.rollback.php
Цитата

Throws a PDOException if there is no active transaction.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16113
Пользователь №: 6543
На форуме: 8 лет, 8 месяцев, 21 день
Карма: 303

Трезвый :
6 лет, 5 месяцев, 30 дней


Цитата (Santehnick @ 18.03.2017 - 13:38)
Начать с чтения мануала я думаю.
Молодец. Не поленился же.

Цитата (Santehnick @ 18.03.2017 - 13:38)
1. не существует метода PDO::startTransaction
Существует. В моем билдере существует. Только вот не надо к названиям переменных придираться. Тут суть важна, а не фантики.

Цитата (Santehnick @ 18.03.2017 - 13:38)
DROP/CREATE делают неявный коммит
Они меня не интересуют. Потому что опять же в моем билдере их нету. Позже может будут в другом компоненте, который за миграции будет отвечать. Я видел сообщение
Цитата (S.Chushkin @ 18.03.2017 - 12:17)
Кстати, многие CREATE, ALTER и пр. в mySQL делают неявный COMMIT.
https://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html
Это так, для справки.
и не прокомментировал только потому, что там ремарка "для справки".
Цитата (Santehnick @ 18.03.2017 - 13:38)
. PDO кидает эксепшен не потому что транзакция не поддерживается, а потому что пытаются откатить неактивную транзакцию.
И что это меняет? А вообще я имел ввиду это:
Цитата
Внимание
PDO проверяет возможность использования транзакций только на уровне драйвера. Если по каким-то причинам механизм транзакций недоступен, но сервер баз данных принял запрос на открытие транзакции, PDO::beginTransaction() вернет TRUE без ошибок.
В качестве примера можно попробовать использовать транзакции для изменения MyISAM таблиц базы данных MySQL.



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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

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



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

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8946
Пользователь №: 26630
На форуме: 6 лет, 3 месяца, 22 дня
Карма: 605




Цитата (twin @ 18.03.2017 - 10:06)
Но для этого нужно знать имя таблицы. А его нет, есть только текст запроса. Парсить его из запроса не вариант.

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

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

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса