beginners guide to web-enabling your informix database using : by: peter schmidt prs technologies,...
TRANSCRIPT
Beginners Guide to Beginners Guide to Web-Enabling your Web-Enabling your Informix databaseInformix database
UsingUsing::
By: By: Peter SchmidtPeter Schmidt
PRSPRS Technologies, Inc.Technologies, Inc.
October, 2000 2PRSTechnologies, Inc.
What is PHP ?What is PHP ?
PHP (officially "PHP: Hypertext Preprocessor")• ( Originally “Personal Home Page” )
• A server-side HTML-embedded scripting language.
• Writing a database-enabled web page is incredibly simple !
• PHP is in use on over 150,000 sites around the world.
• Since PHP is executed on the web server, web browsers can’t see your PHP code.
• PHP is very fast.
• PHP is completely free (Open Source)
PHP (officially "PHP: Hypertext Preprocessor")• ( Originally “Personal Home Page” )
• A server-side HTML-embedded scripting language.
• Writing a database-enabled web page is incredibly simple !
• PHP is in use on over 150,000 sites around the world.
• Since PHP is executed on the web server, web browsers can’t see your PHP code.
• PHP is very fast.
• PHP is completely free (Open Source)
October, 2000 3PRSTechnologies, Inc.
The following databases are currently supported:The following databases are currently supported:
• Informix InterBase PostgreSQL
• dBase FrontBase Solid
• Empress mSQL Sybase
• FilePro (read-only) Direct MS-SQL Unix dbm
• IBM DB2 MySQL Adabas D
• ODBC Velocis Ingres
• Oracle (OCI7 and OCI8)
• Informix InterBase PostgreSQL
• dBase FrontBase Solid
• Empress mSQL Sybase
• FilePro (read-only) Direct MS-SQL Unix dbm
• IBM DB2 MySQL Adabas D
• ODBC Velocis Ingres
• Oracle (OCI7 and OCI8)
October, 2000 4PRSTechnologies, Inc.
An introductory example of PHPAn introductory example of PHP
<html>
<body> <?php echo "Hi, I'm a PHP script!"; ?> </body>
</html>
Note that PHP code is embedded inside the HTML code.
Demo 1
October, 2000 5PRSTechnologies, Inc.
<html><body>
Here I am in HTML! <BR>
<?php echo ”Now I'm in PHP! <BR>"; ?>
Back to HTML! <BR>
</body></html>
HTML
PHP
Back to HTML
Note the PHP start and stop tags
Demo 2
PHP code is executed on the web server!
Switching between HTML and PHPSwitching between HTML and PHP
October, 2000 6PRSTechnologies, Inc.
Putting comments in PHP codePutting comments in PHP code
<?php
echo "This is a test <br>"; // This is a one-line c++ style comment
echo "This is a test <br>"; # This is Unix shell-style style comment
/* This is the first line of a multi line comment This is the second line of comment */
?>
PHP supports 'C', 'C++' and Unix shell-style comments.
October, 2000 7PRSTechnologies, Inc.
Connecting to the Informix databaseConnecting to the Informix database<?php
$database = "video"; /* populate variables */$server = "lapdog_tcp";$login = ”username";$password = ”password";
$dbs = $database . "@" . $server; /* concatenate */
$connect_id = ifx_pconnect($dbs,$g_login,$g_password);
if (!$connect_id) {echo "Unable to connect to Informix database<br>\n";chk_ifx_err1($connect_id);
} else {echo “Informix connection successful! <br>”;
}
?>
Demo 3
This is my user defined function
October, 2000 8PRSTechnologies, Inc.
<?php
$database = "video";$server = "lapdog_tcp";$login = ”username";$password = ”password";
?>
Demo 3
Use a tcp/ip connection to the database
(vs. a shared memory connection)
Warning: E [SQLSTATE=IX 000 SQLCODE=-27000] in /u/www/lapdog/php_demo/php_demo4.php3 on line 40Unable to connect to Informix database
Informix error: Cannot support multiple connections over shared memory.
finderr -27000-27000 Cannot support multiple connections over shared memory.
An application cannot use the CONNECT statement to make more than one connection that uses shared-memory communication (IPC).
Ensure that the application makes only one shared-memory connection at a time. If the application must use concurrent connections, the database server administrator might need to change the connection type(as specified in the nettype field of the sqlhosts file) from a shared -memory connection to a network connection.
Use a tcp/ip connection to avoid error -27000Use a tcp/ip connection to avoid error -27000
October, 2000 9PRSTechnologies, Inc.
Persistent database connectionsPersistent database connections
• An SQL connection that does not close when the execution of your script ends.
• When a persistent connection is requested, PHP checks if there's already an identical persistent connection (that remained open from earlier) - and if it exists, it uses it.
• If it does not exist, it creates the connection.
• if connection overhead is high, persistent connections help you considerably.
• It may (and probably will) change the efficiency of the script, but should not change its behavior!
• An SQL connection that does not close when the execution of your script ends.
• When a persistent connection is requested, PHP checks if there's already an identical persistent connection (that remained open from earlier) - and if it exists, it uses it.
• If it does not exist, it creates the connection.
• if connection overhead is high, persistent connections help you considerably.
• It may (and probably will) change the efficiency of the script, but should not change its behavior!
$connect_id = ifx_pconnect();
October, 2000 10PRSTechnologies, Inc.
<?php
function chk_ifx_err1($result_id) {
$err_string = ifx_error($result_id);
/* Note: error If 1st character of err_string is not blank */
if ($err_string[0] != ' ') {printf("Informix error: %s", ifx_errormsg());die;
}}
?>
Warning: E [SQLSTATE=IX 000 SQLCODE=-952]
in /u/www/lapdog/php_demo/php_demo4.php3 on line 40Unable to connect to Informix database
Informix error: User's password is not correct for the database server.
Demo 4
Get the error string
Check for blank
User defined function
End program
Reporting an Informix errorReporting an Informix error
October, 2000 11PRSTechnologies, Inc.
<?php
if ($connect_id) {
$statmt_txt = "select count(*) count from vhs where type_code = 'ST1' ";
$statmt_id1 = ifx_query($statmt_txt,$connect_id); // EXECUTE SQL
if (!$statmt_id1) { chk_ifx_err1($statmt_id1); } // CHECK FOR ERROR
$row = ifx_fetch_row($statmt_id1); // FETCH RESULT OF COUNT INTO ARRAY
if (!$row) { chk_ifx_err1($statmt_id1); } // CHECK FOR ERROR
$num_rows_selected = sprintf("%d",$row[count]); // FORMAT COUNT
echo "<html>"; echo "$num_rows_selected rows selected <BR>"; // DISPLAY RESULT IN HTML echo "</html>";}
?>
Demo 5
Selecting a count from a tableSelecting a count from a table
October, 2000 12PRSTechnologies, Inc.
<?php
$statmt_txt = "select tape_num Tape_Number ,title from vhs where type_code = 'ST1' order by title";
$statmt_id = ifx_prepare($statmt_txt,$connect_id,IFX_SCROLL); // PREPARE
if (!$statmt_id) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR
$ret_val = ifx_do($statmt_id); // EXECUTE PREPARED STATEMENT
if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR
ifx_htmltbl_result ($statmt_id, "BORDER='1' CELLSPACING=0 CELLPADDING=2 BGCOLOR='cornsilk' ALIGN=center");
?>
Demo 6
See output on next slide
Use display label for clarity
Selecting rows Output to a HTML table.
Selecting rows Output to a HTML table.
October, 2000 13PRSTechnologies, Inc.
Result from using: ifx_htmltbl_result Result from using: ifx_htmltbl_result
Tape_number Title
1 A Piece of the Action
9 A Taste of Armageddon
10 Amok Time
2 And The Children Shall Lead
8 Arena
Demo 6
October, 2000 14PRSTechnologies, Inc.
<?php
$statmt_txt = "select * from vhs where type_code = 'ST1' order by title";
$statmt_id = ifx_prepare($statmt_txt,$connect_id,IFX_SCROLL); // PREPARE
if (!$statmt_id) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR
$ret_val = ifx_do($statmt_id); // EXECUTE PREPARED STATEMENT
if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR
echo <table border=5 cellspacing=0 cellpadding=5 bgcolor=cornsilk>”; // HTML
Demo 7
--- Continued on next slide ---
Selecting rows using a cursorslide 1 of 2
Selecting rows using a cursorslide 1 of 2
October, 2000 15PRSTechnologies, Inc.
while ($row = ifx_fetch_row($statmt_id, ”NEXT” )) {
$serial_id = $row[serial_id];$type_code = chop($row[type_code]);$tape_num = $row[tape_num];$title = chop($row[title]);$hours = $row[hours];$comment = chop($row[comment]);
echo "<tr>\n";echo "<td><center>$serial_id</td>";echo "<td><center>$type_code</td>";echo "<td><center>$tape_num</td>";echo "<td>$title</td>";echo "<td>$hours</td>";echo "<td>$comment</td>";
echo "<td>";}
echo "</table>";?>
Demo 7
--- Continued from previous slide ---
Create an “associative” arraynamed “row”.
Use column namesto identify fields.
Use “chop” to remove trailing blanks if desired.
Populate fields from associative array
Selecting rows using a cursorslide 2 of 2
Selecting rows using a cursorslide 2 of 2
October, 2000 16PRSTechnologies, Inc.
<?php
$statmt_txt = "select * from vhs where type_code = ? order by title";
?>
Demo 7
“placeholders” are currently not supported, but you can do this instead.
<?php
$my_code = “ST1”;
$statmt_txt = "select * from vhs where type_code = ’ $my_code ' order by title";
?>
Invalid statement
valid statement
Can’t use placeholdersCan’t use placeholders
October, 2000 17PRSTechnologies, Inc.
<html>
<form action="video_db2.php3" method="post"> Tape Number:
<input type="text" name=”tape_num"> <input type="submit"></form>
</html>
<?php
echo “The tape number is: $tape_num <br>”;
?>
Variables from outside PHPHTML Forms (GET and POST)
Variables from outside PHPHTML Forms (GET and POST)
October, 2000 18PRSTechnologies, Inc.
<?php
if ($connect_id) {
$sql_txt = "insert into vhs (serial_id, type_code, tape_num, title) values "; $sql_txt .= ” ($serial_id, \”$type_code\”, $tape_num, \”$title\”) ";
$ret_val = ifx_query($sql_txt,$connect_id); // INSERT RECORD
if (!$ret_val) { chk_ifx_err1($statmt_id); } // CHECK FOR ERROR
}
?>
Inserting a rowInserting a row
October, 2000 19PRSTechnologies, Inc.
<?php
$input_array = array ( "type_code" => $type_code, "tape_num" => $tape_num, "title" => $title, "hours" => $hours, "comment" => $comment);
?>
An associative array is an array which uses a string (instead of a number) to locate an element within the array.
Creating an associative arrayCreating an associative array
October, 2000 20PRSTechnologies, Inc.
<?php$type_code_array = array ( "MOVIE" => "Movies", "DS9" => "Deep Space 9", "ST1" => "Star Trek (Original)", "ST2" => "Star Trek the Next Generation", "VOY" => "Star Trek Voyager", "HOME" => "Home Movies", "MAX" => "Max Headroom", "OTHER" => "Other");
echo “<select name='type_code'> <option value=' '>Choose Type of Video”;
while (list($key,$value) = each($type_code_array)) {
if ($key == $type_code) { echo "<option value='$key' selected>$value\n"; } else { echo "<option value='$key'>$value\n"; }}echo "</select>”;?>
Create an associative array of type codes
Step through the array
Stepping through an associative arrayStepping through an associative array
October, 2000 21PRSTechnologies, Inc.
<?php
if (preg_match("/\|/",$query_string)) { // Search $query_string for a pipe
… your code here … // Do this if pipe was found
}
?>
Search a string for the presence of a pipe symbol
• Perform a regular expression match on a string.
• Return (true) if match was positive.
• The syntax for the pattern search closely resembles Perl.
• Perform a regular expression match on a string.
• Return (true) if match was positive.
• The syntax for the pattern search closely resembles Perl.
Searching a string for a pattern Perl-compatible Regular Expression functions
Searching a string for a pattern Perl-compatible Regular Expression functions
October, 2000 22PRSTechnologies, Inc.
<?php
$query_string = “ 123 | 456 | 789 “;
$pipe_list = preg_split("/\|/",$query_string); // Create an array of strings
while ( list($key,$value) = each($pipe_list)) { // for each element in the array...
… your code here …
?>
Create an array from pipe demimited string
• Split string by a regular expression.
• Returns an array containing substrings.
• The syntax closely resembles Perl.
• Split string by a regular expression.
• Returns an array containing substrings.
• The syntax closely resembles Perl.
Creating an array from a pipe-delimited string
Perl-compatible Regular Expression functions
Creating an array from a pipe-delimited string
Perl-compatible Regular Expression functions
October, 2000 23PRSTechnologies, Inc.
<?php
function cnt_and_query ($table_name,$where_clause) {
… more php code here …
return array ($statmt_id2,$num_rows_selected);
}
?>
<?php
list($statmt_id,$cnt_found) = cnt_and_query("vhs",$where_clause);
?>
Call a function
Start function
End function
Return multiple values
Call a functionpassing and returning variables
Call a functionpassing and returning variables
October, 2000 24PRSTechnologies, Inc.
<?phprequire("common.inc");require("menu.inc");require("display_form.inc");require("query.inc");require("add.inc");require("modify.inc");
?>
• Use include() and require() to reference program modules.
• With include, statements are re-evaluated each time - almost like calling a function.
• With require, statements are replaced by the required file when it is first encountered. Good for user defined functions.
• Use include() and require() to reference program modules.
• With include, statements are re-evaluated each time - almost like calling a function.
• With require, statements are replaced by the required file when it is first encountered. Good for user defined functions.
Breaking your program up into logical modules
Breaking your program up into logical modules
October, 2000 25PRSTechnologies, Inc.
Scope of variablesScope of variables• Scope spans the entire module, including “included” and
“required” files.
• Variables defined outside of a function, can be referenced inside the function, if defined as globally available.
• Any variable defined inside a function can only be used within that function, unless specifically defined as globally available in that function.
• Globals can also be accessed via the special “GLOBALS” array.
• See “demo8” for examples.
• Scope spans the entire module, including “included” and “required” files.
• Variables defined outside of a function, can be referenced inside the function, if defined as globally available.
• Any variable defined inside a function can only be used within that function, unless specifically defined as globally available in that function.
• Globals can also be accessed via the special “GLOBALS” array.
• See “demo8” for examples.
Demo 8
global $variable5;
$dbs = $GLOBALS["DATABASE"];
October, 2000 26PRSTechnologies, Inc.
Installing PHPInstalling PHP• PHP (without Informix) is usually available on most Linux and
Apache installations using ODBC.
• Configuring PHP to use Informix is NOT a cakewalk.• Requires use of ESQL/C libraries to compile (free w/Client SDK).
• Don’t reuse previous versions of Apache httpd.conf if you are upgrading Apache from a earlier version.
• If you want the database to reside in a machine separate from the web server, you will need Informix Client SDK or I-Connect on the web server.
• If you're using I-Connect on the deployment machine, you must compile on a machine with ClientSDK installed. And CSDK and I-Connect need to be in the same directory on the two different machines.
• PHP (without Informix) is usually available on most Linux and Apache installations using ODBC.
• Configuring PHP to use Informix is NOT a cakewalk.• Requires use of ESQL/C libraries to compile (free w/Client SDK).
• Don’t reuse previous versions of Apache httpd.conf if you are upgrading Apache from a earlier version.
• If you want the database to reside in a machine separate from the web server, you will need Informix Client SDK or I-Connect on the web server.
• If you're using I-Connect on the deployment machine, you must compile on a machine with ClientSDK installed. And CSDK and I-Connect need to be in the same directory on the two different machines.
October, 2000 27PRSTechnologies, Inc.
• Aquire or download the software.
• Unpack Apache and PHP tar-balls.
• Set your Informix environmentals.
• Pre-Configure Apache.
• Configure, compile and install PHP
• Configure, compile and install Apache.
• Update Apache startup script with Informix environment
• Update Apache httpd.conf
• Re-start Apache web server.
• Test.
• Aquire or download the software.
• Unpack Apache and PHP tar-balls.
• Set your Informix environmentals.
• Pre-Configure Apache.
• Configure, compile and install PHP
• Configure, compile and install Apache.
• Update Apache startup script with Informix environment
• Update Apache httpd.conf
• Re-start Apache web server.
• Test.
Installing PHP with ApacheOverview
Installing PHP with ApacheOverview
October, 2000 28PRSTechnologies, Inc.
• Go to http://www.php.net
• Click on: downloads
• Click on: Complete Source Code• PHP 4.0.2 - 29 August 2000
• Go to http://www.apache.org
• Click on apache server.
• Click on download.
• Click on apache_1.3.14.tar.gz
• Go to http://www.php.net
• Click on: downloads
• Click on: Complete Source Code• PHP 4.0.2 - 29 August 2000
• Go to http://www.apache.org
• Click on apache server.
• Click on download.
• Click on apache_1.3.14.tar.gz
Installing PHP with ApacheAquire or download the software
Installing PHP with ApacheAquire or download the software
October, 2000 29PRSTechnologies, Inc.
cd /usr/local
gunzip apache_1.3.14.tar.gz
tar xvf apache_1.3.14.tar
gunzip php-4.0.2.tar.gz
tar xvf php-4.0.2.tar
Installing PHP with Apache Unpack Apache and PHP tar-balls
Installing PHP with Apache Unpack Apache and PHP tar-balls
October, 2000 30PRSTechnologies, Inc.
INFORMIXDIR=/opt/informixINFORMIXSERVER=myserver_shmONCONFIG=onconfig.myserverPATH=$PATH:$INFORMIXDIR/binLD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql
export INFORMIXDIR INFORMIXSERVER ONCONFIG LD_LIBRARY_PATH
Don’t forget this one!
Installing PHP with Apache Set your Informix environmentals
Installing PHP with Apache Set your Informix environmentals
Optional
October, 2000 31PRSTechnologies, Inc.
cd apache_1.3.14
./configure --prefix=/usr/local/apache
cd ..
Installing PHP with Apache Pre-Configure Apache
Installing PHP with Apache Pre-Configure Apache
October, 2000 32PRSTechnologies, Inc.
cd php-4.0.2
./configure --with-apache=../apache_1.3.14 --with-informix=$INFORMIXDIR
make
make install
cd ..
Installing PHP with Apache Configure, compile and install PHP
Installing PHP with Apache Configure, compile and install PHP
October, 2000 33PRSTechnologies, Inc.
cd apache_1.3.14
./configure --prefix=/usr/local/apache \
--enable-module=rewrite \
--enable-shared=rewrite \
--enable-module=most \
--enable-shared=max \
--enable-module=so \
--activate-module=src/modules/php4/libphp4.a \
--enable-module=php4
make
make install
cd ..
Installing PHP with Apache Configure, compile and install Apache
Installing PHP with Apache Configure, compile and install Apache
October, 2000 34PRSTechnologies, Inc.
cd /etc/rc.d/init.d
• On Linux, update the apache start-up script “httpd” to include the Informix environment.
• Or use apachectl. (Varies by platform.)
• On Linux, update the apache start-up script “httpd” to include the Informix environment.
• Or use apachectl. (Varies by platform.)
Installing PHP with Apache Update Apache startup script with Informix environment
Installing PHP with Apache Update Apache startup script with Informix environment
October, 2000 35PRSTechnologies, Inc.
cd /usr/local/apache/conf
• Update the apache configuration file “httpd.conf”.
• If you have upgraded Apache from a different version, do not use the previous “httpd.conf” file as a basis for the new one.
• Update the apache configuration file “httpd.conf”.
• If you have upgraded Apache from a different version, do not use the previous “httpd.conf” file as a basis for the new one.
AddModule mod_php4.c
<IfModule mod_php4.c>
AddType application/x-httpd-php4 .php4
AddType application/x-httpd-php4-source .phps
</IfModule>
Installing PHP with Apache Update Apache httpd.conf
Installing PHP with Apache Update Apache httpd.conf
October, 2000 36PRSTechnologies, Inc.
cd /etc/rc.d/init.d
./httpd restart
Installing PHP with Apache Re-start Apache web server
Installing PHP with Apache Re-start Apache web server
apachectl
apachectl configtest
Also, you can use:
On Linux:
October, 2000 37PRSTechnologies, Inc.
• http://www.prstech.com (downloads section)
• This presentation• Entire source of videotape demo• Source of all examples• Tech-Notes article on PHP by Mario Estrada• Monterey Peninsula Ski Club - Cabin Reservation System by
Jonathan Leffler
• http://www.php.net
• http://www.zend.com
• http://www.prstech.com (downloads section)
• This presentation• Entire source of videotape demo• Source of all examples• Tech-Notes article on PHP by Mario Estrada• Monterey Peninsula Ski Club - Cabin Reservation System by
Jonathan Leffler
• http://www.php.net
• http://www.zend.com
PHP ResourcesPHP Resources
PRSPRS Technologies, Technologies, Inc.Inc.