2014-11-17 1 views
1

У меня есть этот скрипт php, который выполняет хранимую процедуру. Я извлекаю StoredProcedure, который принимает два значения параметра.PHP: Как использовать интервал даты для хранимой процедуры?

Проблема:

Как я могу поставить позволяет сказать: фактический день за последние 10 минут? Итак, я хочу каждую 10-минутную запись. Возможно ли это, хотя этот StoredProcedure был предоставлен мне только для читаемого доступа с датой начала и окончания в качестве параметров?

Заранее спасибо

PHP:

//DATE values to replace in parameters 
    $start_date = "2014-11-11"; 
    $end_date = "2014-11-12"; 

    if($row = mysqli_fetch_assoc($query_overlay_result)){ 
     $sp_value = $row['query']; 
    } 

    //replacing parameter values for Dates 
    $sp_value = str_replace('start_date',$start_date,$sp_value); 
    $sp_value = str_replace('end_date',$end_date,$sp_value); 

хранимых процедур: Это в другом сервере, поэтому я сохранил фактическое значение строки SP в моей таблице «наложения», как так: ВЫЗОВ telephony.sp_get_spec_stat_all_agents ('дата_начала', 'end_date')

//Overlay table 
    $query_overlay_sql = "SELECT query FROM overlays"; 
    //prepare query 
    $query_overlay_result = mysqli_query($dbh1,$query_overlay_sql); 

я затем выполнить SP, извлекая два значения, Мне нужно объединить таблицы с разных серверов.

while ($row = mysqli_fetch_assoc($dbh2_result)){ 
     $memo[] = array("username" => $row['memo_code'], 
         "aht_value" => $row['avg_handle_time'] 
         ); 
} 

Надеется, что это проясняет вещи

+1

Это не очевидно, что 'str_replace()' линии используются. Если я понимаю остальную часть вашего вопроса, вы хотите иметь возможность указать даты начала и окончания в течение 10 минут, но не можете изменить код SQL? Если это так, вы можете определить правильные значения времени в PHP с помощью объекта ['DateTime'] (http://php.net/manual/en/datetime.construct.php) –

+0

Вы пытаетесь запросить запрос из база данных? –

+0

@MichaelBerkowski Да, вы правильно поняли мой вопрос. Я не могу изменить код SQL. – alda1234

ответ

1

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

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

$sql = 'CALL telephony.sp_get_spec_stat_all_agents(NOW() - INTERVAL 10 MINUTE, NOW())'; 
$query_overlay_result = mysqli_query($dbh2, $sql); 
+0

Да, проще, чем длинный ответ, над которым я только работал, используя '?' С значениями даты PHP ... –

+0

Если вы действительно _must_ храните инструкцию 'CALL' в своей таблице (похоже, там есть только один оператор, поэтому возможно, вам не нужно), тогда вы будете использовать свой 'str_replace()' процесс, чтобы заменить 'start_time' на' NOW() - INTERVAL 10 MINUTE' и ваше конечное время с 'NOW()' (удаление одиночных кавычек на обоих). Было бы намного сложнее просто выполнить оператор 'CALL' из строки в вашем PHP-коде, как и в ответе Сэма. –

+0

причина, по которой я фактически сохраняю SP в таблице, потому что theres другие поля, которые я буду использовать позже. Кроме того, я выполняю SP с другого сервера с другим соединением, как вы можете видеть в моем коде выше «dbh2» .. Я попытался подключить только ** CALL telephony.sp_get_spec_stat_all_agents (NOW() - INTERVAL 10 MINUTE, NOW()) **, но не возвращает никакого результата. – alda1234

Смежные вопросы