|
ibase_connect
Open a connection to an InterBase database
(PHP 4, PHP 5)
Example 681. ibase_connect() example<?php Code Examples / Notes » ibase_connectag
With php5 on Windows i couldnt connect to a firebird database with following error : Warning: ibase_connect(): Unable to complete network request to host "localhost" . Failed to locate host machine. Undefined service gds_db/tcp. in C:\\wamp\\php\\ibase.php on line 5 the connect command was "$dbh = ibase_connect ("localhost:path_to_file.fdb", $username, $password);" The solution is to insert the line gds_db 3050/tcp #firebird Database into the windows services file %WINDIR%\\system32\\drivers\\etc\\services fb dot bird
Remember for different locations of php.ini file: ..\xampp\php\php.ini ..\xampp\apache\bin\php.ini ..\xampp\php\php4\php.ini Please do not confuse this and know location _loaded_ *.ini-file! robert silvia
Just to update Simon's note... Things must have been fixed since Simon wrote that note. With PHP5 the following example works flawlessly: $strconnect = 'localhost:/opt/firebird/examples/employee.fdb'; if (!($db=ibase_connect($strconnect, 'sysdba', 'yourpass', 'ISO8859_1', 0, 1))) die('Could not connect: ' . ibase_errmsg()); $sql = "SELECT PO_NUMBER, ORDER_STATUS, ITEM_TYPE FROM SALES"; $cursor = ibase_query($sql); $row_array = ibase_fetch_row($cursor); print_r($row_array); ibase_free_result($cursor); ibase_close($db); Also you CAN get away with the following connection string: ibase_connect('/opt/firebird/examples/employee.fdb', 'sysdba', 'yourpass') sam
If you get a sloooow work of ibase_connect on Win2003, try to update your FireBird to version 1.5 or above, and your InterBase to version 7.1. Or move back to Win2000 :)
anthony
If you get a message like: 'Dynamic SQL Error SQL error code = -901 feature is not supported', this may be caused by InterBASE client 6.01 accessing a server running 5.x. Make sure the dialect value is set to '1', like the following: ibase_connect ('localhost:/usr/db/db.gdb', 'SYSDBA', 'masterkey', 'ISO8859_1', '100', '1' ) ; That last value is the dialect, but you need the two preceding also, do avoid errors. Anthony simon
I found it difficult to get anything working using the current documentation. While logic would suggest that the format in the docs should work (being based on all the syntax of other standard database access functions) I had problem after problem. Finally I found some comments on a newgroup that helped, and this is the result. This is actual production code (not a mere example). It works. Don't ask me why it is so different from the official docs. if ( ibase_connect( $db_filespec,$db_user,$db_pass_word) ) { $query = "SELECT c.id, c.title, c.description "; $query .= "FROM collections c "; $query .= "WHERE (c.id = $page_id) "; $result = ibase_query( $query ); $row_array = ibase_fetch_row($result); $row_fetched = !empty($row_array); if ($row_fetched) { // Extract the row into variables $collection_id = $row_array[0]; $edit_title = $row_array[1]; $edit_desc = $row_array[2]; // Standardise the record contents $collection_id = $collection_id + 0; // force type to numeric } // Wrap up the database side of things ibase_commit(); // note parenthesis but no parameters. ibase_close; // note total lack of parenthesis and parameters ! } You'll notice that there is no reference to a database handle in this code. It seems to be implicit when dealing with interbase functions. Certainly, I couldn't get the code to work when using it explicitly. This makes the documentation very hard to work with, and any reference to a handle needs to be ignored. Important: ibase_close doesn't work for me if I put parenthesis after it. eg: ibase_close; // works ibase_close(); // fails ibase_close($db); // fails Note: the line "if ($row_fetched)" could be replaced with "while ($row_fetched)" if you need to process more than one record. All that said, Interbase is a fantastic database to work with and IMHO a much better choice than something like PostgreSQL if you need to move up from MySQL to something more industrial strength. Just be sure to RTFM. Åukasz wojciechowski
ag at dividi dot de wrote: " The solution is to insert the line gds_db 3050/tcp #firebird Database into the windows services file %WINDIR%\\system32\\drivers\\etc\\services " ...but it is very important to hit ENTER at the end of this line: gds_db 3050/tcp #firebird Database I spent 2 hours before I discover this - I love Windows ;-) -- greetings |
Change Languageibase_add_user ibase_affected_rows ibase_backup ibase_blob_add ibase_blob_cancel ibase_blob_close ibase_blob_create ibase_blob_echo ibase_blob_get ibase_blob_import ibase_blob_info ibase_blob_open ibase_close ibase_commit_ret ibase_commit ibase_connect ibase_db_info ibase_delete_user ibase_drop_db ibase_errcode ibase_errmsg ibase_execute ibase_fetch_assoc ibase_fetch_object ibase_fetch_row ibase_field_info ibase_free_event_handler ibase_free_query ibase_free_result ibase_gen_id ibase_maintain_db ibase_modify_user ibase_name_result ibase_num_fields ibase_num_params ibase_param_info ibase_pconnect ibase_prepare ibase_query ibase_restore ibase_rollback_ret ibase_rollback ibase_server_info ibase_service_attach ibase_service_detach ibase_set_event_handler ibase_timefmt ibase_trans ibase_wait_event |