GDR
Guest
Проблема со строковыми параметрами ХП для FireBird1.5 под PHP5
Здравствуйте. Есть БД под FB1.5.2.Еще на этой машине стоит апач и php5. Решил попробовать себя в php и написать web интерфейс к этой БД. Основная логика у меня вынесена на сервер и реализована в виде ХП. Реализовывать ее на php (переписывать заново) я посчитал ненужным. Проблема такая. Есть ХП, которой я передаю следующие параметры:
CREATE PROCEDURE FORM17OTCHET (
DESCR VARCHAR(20),
MIN_DATE DATE,
MAX_DATE DATE)
RETURNS (
--много чего)
AS
-- и т.д.
ХП я вызываю из php обычным образом
Проблема - когда в параметре присутствуют русские буквы вылетает ошибка
Warning: ibase_query() [function.ibase-query]: arithmetic exception, numeric overflow, or string truncation in . И это только с русскими буквами. Копирую сгенеренную строку $stmt и выполняю в IBExpert - все проходит на ура.
Коннект к базе происходит с параметрами
Т.е. так, как и следует - с указанием чарсета.
В чем может быть дело? Спасибо.
-~{}~ 16.02.05 13:51:
Вот что нарыл.
Если написать
То в $stmt будет
Что и должно быть, но
вылетает с вышеупомянутой ошибкой.
А если просто написать
То все выполняется как нужно. Спрашивается - в чем ошибка? Чем одна строка отличается от другой?
Здравствуйте. Есть БД под FB1.5.2.Еще на этой машине стоит апач и php5. Решил попробовать себя в php и написать web интерфейс к этой БД. Основная логика у меня вынесена на сервер и реализована в виде ХП. Реализовывать ее на php (переписывать заново) я посчитал ненужным. Проблема такая. Есть ХП, которой я передаю следующие параметры:
CREATE PROCEDURE FORM17OTCHET (
DESCR VARCHAR(20),
MIN_DATE DATE,
MAX_DATE DATE)
RETURNS (
--много чего)
AS
-- и т.д.
ХП я вызываю из php обычным образом
PHP:
$stmt = sprintf("select * from FORM17OTCHET('%s','%s', '%s')", $trunks_arr[$i], $date_b, $date_e);
//$trunks_ar - массив с названиями (русскими и нерусскими)
$ibquery = ibase_query($ibdatabase, $stmt) or die ("Ошибка при выполнении запроса $stmt");
Warning: ibase_query() [function.ibase-query]: arithmetic exception, numeric overflow, or string truncation in . И это только с русскими буквами. Копирую сгенеренную строку $stmt и выполняю в IBExpert - все проходит на ура.
Коннект к базе происходит с параметрами
PHP:
$dbpath = "128.1.200.83:d:\base\\new_stat.fdb";
$dblogin = "qqq";
$dbpassword = "www";
$dbcharset = "WIN1251";
$ibdatabase = ibase_connect($dbpath, $dblogin, $dbpassword, $dbcharset) or die("Ошибка в подключениии к $dbpath");
В чем может быть дело? Спасибо.
-~{}~ 16.02.05 13:51:
Вот что нарыл.
Если написать
PHP:
$trunks_arr[0] = "Параметр1";
$date_b = "1.02.2005";
$date_e = "2.02.2005";
$stmt = "select * from FORM17OTCHET('$trunks_arr[0]','$date_b', '$date_e')";
PHP:
select * from FORM17OTCHET('Параметр1','1.02.2005', '2.02.2005')
PHP:
$ibquery = ibase_query($ibdatabase, $stmt);
А если просто написать
PHP:
$stmt = "select * from FORM17OTCHET('Параметр1','1.02.2005', '2.02.2005')";