The website database access will be performed by a shared script, hub_connect.php, in the /var/www/private_html directory. This script has login details, so is placed in a new directory outside of the publicly accessible directory tree.
sudo mkdir /var/www/private_html
give pi ownership over public and private directories…
sudo chown -R pi:pi /var/www/
create file…
cd /var/www/private_html nano hub_connect.php
<?php //require the PEAR::MDB2 classes. require_once 'MDB2.php'; //Makes resultsets into column-name-addressable dictionaries define("DICTCURSOR", MDB2_FETCHMODE_ASSOC); //Define some constants $db_engine = "pgsql"; $db_user = "postgres"; $db_pass = "raspberry"; $db_host = "localhost:5432"; $db_name = "hub"; //Assemble datasource name $datasource = $db_engine.'://'.$db_user.':'.$db_pass.'@'.$db_host.'/'.$db_name; //Define connection options $options = array( 'debug' => 2, 'result_buffering' => true, 'portability' => MDB2_PORTABILITY_NONE ); $db_object = MDB2::connect($datasource, $options); if (PEAR::isError($db_object)) { die($db_object->getMessage()); } ?>
Now we can test the database access from a PHP script, but first we need to enable Display Errors .
sudo nano /etc/php5/apache2/php.ini
Find the line display_errors = Off and change to display_errors = On. Then restart the apache web server…
sudo service apache2 restart
Place the following script in the /var/www/html directory.
<?php // // hellodb.php script to show PostgreSQL and PHP working together // // Required scripts require_once '../private_html/hub_connect.php'; $qry = "SELECT * FROM \"Zone\""; $result = $db_object->query($qry); if (MDB2::isError($result)) { die($result->getMessage()); }//end db error echo "Show me the zones:<br />"; while ($row = $result->fetchRow(DICTCURSOR)) { print $row["ZoneID"].' '.$row["ZoneName"].'<br />'; }//end while row ?>
Open it with your browser:
You should see the following output:
Any PHP errors will be logged in the following location:
/var/log/apache2/error.log
This completes the setup of the core hub components. In the next post we will consider the plan for the remaining parts of the project.