MYSQL

Asterisk cmd MYSQL

Установка
Это дополнение, не устанавливается по умолчанию и должно быть загружено и установлено с asterisk-addons.

Описание
MYSQL(): Basic MYSQL Database Functionality

Синтаксис

MYSQL(Connect connid dbhost dbuser dbpass dbname)

Подключение к базе данных. Аргументы содержат стандартные MySQL параметры, передаваемых функций mysql_real_connect. Идентификатор подключения возвращается в ${connid}. Идентификатор соединения будет возвращен в переменной ${connid}

MYSQL(Query resultid ${connid} query-string)
Выполняет стандартный запрос к базе данных MySQL, запрос содержится в параметре query-string, используется идентификатор соединения определенный в ${connid}. Результат запроса будет сохранен в переменной ${resultid}.

MYSQL(Fetch fetchid ${resultid} var1\ var2\ …\ varN)
Если есть доступные для выборки записи в результате запроса к базе данных, ${fetchid} устанавливается в 1 и одна запись будет выбрана из возвращенного результата, хранящегося в ${resultid}. Полученные значения полей будут назначены переменным ${var1}, ${var2} … ${varN} согласно указанному в запросе порядку.

MYSQL(Clear ${resultid})
Очищает память и структуры данных связанных с результатом запроса.

MYSQL(Disconnect ${connid})
Отключается от соединения ${connid}.

exten => _X.,1,MYSQL(Connect connid localhost dbuser dbpass dbname)
exten => _X.,2,MYSQL(Query resultid ${connid} SELECT\ scriptname\ from\ mac2pin\ where\ userid=${CALLERIDNAME})
exten => _X.,3,MYSQL(Fetch fetchid ${resultid} AGIScript)
exten => _X.,4,GotoIf($[${AGIScript} = NULL]?5:7)
exten => _X.,5,AGI(${DefaultAGIScript},${EXTEN})
exten => _X.,6,Goto(_X.,8)
exten => _X.,7,AGI(${AGIScript},${EXTEN})
exten => _X.,8,MYSQL(Clear ${resultid})
exten => _X.,9,MYSQL(Disconnect ${connid})
exten => _X.,10,Hangup

В вышеприведенном примере, если звонящий пользователь отсоединится, когда его вызов обрабатывается, где-то в промежутке между 5 и 7 приоритетом, тогда функции MYSQL(Clear…) и MYSQL(Disconnect….) не будут выполнены. В этом случае соединение останется не закрытым, и с каждым новым таким вызовом число незакрытых соединений будет увеличиваться. В конечном счете, в MySQL сервере кончится лимит на количество одновременно открытых соединений с базой. (В зависимости от установленного лимита в конфигурационном файле mysql). Поэтому, для данного случая нужно немного изменить последовательность действий так, как показано ниже:

exten => _X.,1,MYSQL(Connect connid localhost asterisk dbpass asterisk)
exten => _X.,2,MYSQL(Query resultid ${connid} SELECT\ scriptname\ from\ mac2pin\ where\ userid=${CALLERIDNAME})
exten => _X.,3,MYSQL(Fetch fetchid ${resultid} AGIScript)
exten => _X.,4,MYSQL(Clear ${resultid})
exten => _X.,5,MYSQL(Disconnect ${connid})
exten => _X.,6,GotoIf($[${fetchid}]?7:9)
exten => _X.,7,AGI(${DefaultAGIScript},${EXTEN})
exten => _X.,8,Hangup
exten => _X.,9,AGI(${AGIScript},${EXTEN})
exten => _X.,10,Hangup 

Тут мы очищаем память и отсоединяемся от базы данных сразу же после Fetch. Это гарантирует то, что перед тем как мы запустим на выполнение AGI скрипт, мы будем уверены, что Очистка памяти и отсоединение от базы данных уже было выполнено. Этот метод можно применять, если Вам действительно необходимо получить из базы что-то либо уникальное, либо часто изменяющееся

commands

mysql_realtime

  • asterisk/cmd/mysql.txt
  • Последние изменения: 2014/04/22