Форумы портала PHP.SU » » Работа с СУБД » Создание базы данных Firebird

Страниц (1): [1]
 

1. Kouki - 11 Июля, 2011 - 17:53:00 - перейти к сообщению
Помогите создать базу данных Firebird средствами PHP. Да, знаю, что проще ibexpert'ом сделать, но нужно именно в PHP. Пробовал делать по аналогии с мускулом:

$host="localhost";
$user="SYSDBA";
$pass="masterkey";
$DB = "lphp";
$dbh = ibase_connect($host, $user, $pass) or die ("Невозможно подключиться");
$query = "CREATE DATABASE '$DB'";
ibase_query($dbh, $query) or die ("Сбой при создании БД: " . ibase_errmsg());

Естественно он не видит файл localhost. Так к чему подключаться, если никакой базы не создано?
2. Champion - 11 Июля, 2011 - 18:15:41 - перейти к сообщению
А если указать полный путь? Например /path/to/file.fdb или localhost:path/to/dbfile.fdb
(Добавление)
А блин, сначала ж приконнектиться к чему-то надо... действительно интересно
(Добавление)
Как вариант - можно приконнектиться к чему-то уже существующему, а потом выполнить CREATE DATABASE, либо использовать системный вызовом isql и скормить ему скрипт, создающий БД
3. Kouki - 11 Июля, 2011 - 18:39:09 - перейти к сообщению
Подсоединяться к существующей бд нельзя по заданию.
Может в хост чего прописать? С мускулом же все работает.
4. Champion - 11 Июля, 2011 - 18:44:03 - перейти к сообщению
http://tech.groups.yahoo.com/group/firebird-php/message/622 пишет:
CREATE DATABASE is supported by ibase_query() if you pass IBASE_CREATE
as link argument. [eg. ibase_query(IBASE_CREATE, "CREATE DATABASE ...")]
In this case, the return value will be a link resource that can be used
in subsequent query()/prepare() calls.


вот что нашел
5. Kouki - 16 Июля, 2011 - 13:03:41 - перейти к сообщению
Champion
Спасибо, помогло.

ibase_query(IBASE_CREATE, "CREATE DATABASE 'base.fdb' USER 'SYSDBA' PASSWORD 'masterkey'");
6. Kouki - 24 Июля, 2011 - 14:18:34 - перейти к сообщению
Возникла необходимость для учебных целей в скрипте создания базы данных сразу же ее и удалить (перед этим проведя с ней некие манипуляции и вывести что-нибудь). Самый элементарный способ не работает:

<?php
$user = "SYSDBA";
$pass = "masterkey";
$name = "1.fdb";
ibase_query(IBASE_CREATE, "CREATE DATABASE '$name' USER '$user' PASSWORD '$pass'");
$host = "localhost:C:\Program Files\Apache Group\Apache\1.fdb";
$dbh = ibase_connect($host, $user, $pass);
ibase_drop_db($dbh);
?>

Ошибка: lock time-out on wait transaction object C:\PROGRAM FILES\APACHE GROUP\APACHE\1.FDB is in use
С транзакциями не работал пока, так что прошу помощи.
7. Kouki - 25 Июля, 2011 - 14:48:30 - перейти к сообщению
Ап.
8. Champion - 25 Июля, 2011 - 16:51:40 - перейти к сообщению
Champion пишет:
In this case, the return value will be a link resource that can be used in subsequent query()/prepare() calls.
Значит отдельного коннекта не надо. Можно пользоваться тем, что вернет ibase_query.
А если вы делаете второй коннект, то от первого коннекта (вы ведь его не закрывали) остается активная заинтересованная транзакция, и она не дает удалить БД. Я думаю, что в этом дело. Первый коннект надо либо закрыть, либо пользоваться им, вместо создание нового.
9. Kouki - 25 Июля, 2011 - 21:05:31 - перейти к сообщению
Champion
Спасибо еще раз за помощь.

<?php
$user = "SYSDBA";
$pass = "masterkey";
$name = "1.fdb";
ibase_query(IBASE_CREATE, "CREATE DATABASE '$name' USER '$user' PASSWORD '$pass'");
ibase_drop_db();
?>

<?php
$user = "SYSDBA";
$pass = "masterkey";
$name = "1.fdb";
ibase_query(IBASE_CREATE, "CREATE DATABASE '$name' USER '$user' PASSWORD '$pass'");
ibase_close();
$host = "localhost:C:\Program Files\Apache Group\Apache\1.fdb";
$dbh = ibase_connect($host, $user, $pass);
ibase_drop_db($dbh);
?>

 

Powered by ExBB FM 1.0 RC1