IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 8, 2023, 12:00:36 PM (3 years ago)
Author:
eugene
Message:

merge from eam_branches/ipp-20220316. add PDO DB access method (DBI now deprecated); modern PHP is more strict about array index names (must be quoted); more flexible locations for CZARPLOTDIR, METRICSPLOTDIR for test installations; add fpcamera

Location:
trunk/ippMonitor
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippMonitor

  • trunk/ippMonitor/raw/ipp.php

    r41730 r42384  
    2626
    2727  menu ('ipp.menu.dat', 'Select Project', 'ipp.css', $ID['link'], $ID['proj']);
    28   if ($_GET['new'] && $_GET['proj']) {
     28  if (isset($_GET['new']) && isset($_GET['proj'])) {
    2929    echo "<p> Project is now <b>" . $_GET['proj'] . "</b></p>\n";
    3030  }
     
    6666  global $DBI;
    6767
     68  if ($DBI == "PDO") {
     69    $result = $qry->fetch();
     70    if ($result == NULL) {
     71      $success = 0;
     72    } else {
     73      $success = 1;
     74    }
     75  }
    6876  if ($DBI == "MDB2") {
    6977    $result = $qry->fetchRow();
     
    9098  global $CZARDBHOST;
    9199
     100  // define the DSN strings. NOTE: PDO uses a different format from DB or MDB2
     101  if ($database == $CZARDBNAME) {
     102    $dsn_pdo = "mysql:host=$DBHOST;dbname=$database";
     103    $dsn = "mysql://$DBUSER:$DBPASS@$CZARDBHOST/$database";
     104    $dsnerr = "mysql://$DBUSER:XXX@$CZARDBHOST/$database"; // only used to report the error
     105  } else {
     106    $dsn_pdo = "mysql:host=$CZARDBHOST;dbname=$database"; // note this is case sensitive
     107    $dsn = "mysql://$DBUSER:$DBPASS@$DBHOST/$database";
     108    $dsnerr = "mysql://$DBUSER:XXX@$DBHOST/$database"; // only used to report the error
     109  }
     110
     111  // PDO has a different error handling method initially (throw exception)
     112  // but after construction can be set to match DB & MDB2
     113  if ($DBI == "PDO") {
     114    try {
     115      $db = new PDO($dsn_pdo, $DBUSER, $DBPASS);
     116      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
     117    } catch (PDOException $dberr) {
     118      dbconnectFailure($dberr, $dsnerr);
     119    }
     120    return $db;
     121  }
     122
    92123  $success = 0;
    93124  if ($DBI == "MDB2") {
     
    104135  }
    105136
    106   // connect to the database
    107   if ($database == $CZARDBNAME) {
    108     $dsn = "mysql://$DBUSER:$DBPASS@$CZARDBHOST/$database";
    109     $dsnerr = "mysql://$DBUSER:XXX@$CZARDBHOST/$database"; // only used to report the error
    110   } else {
    111     $dsn = "mysql://$DBUSER:$DBPASS@$DBHOST/$database";
    112     $dsnerr = "mysql://$DBUSER:XXX@$DBHOST/$database"; // only used to report the error
    113   }
    114137  if ($DBI == "DB") {
    115138    $db = DB::connect($dsn);
     
    118141    $db = MDB2::connect($dsn);
    119142  }
    120 
    121143  if (dberror($db)) {
    122     echo "<b>error accessing database</b><br>\n";
    123     echo "<b>tried $dsnerr</b><br>\n";
    124     $result = $db->getMessage();
    125     echo "$result<br>";
    126     menu_end();
     144    dbconnectFailure($db, $dsnerr);
    127145  }
    128146  return $db;
    129147}
    130148
     149function dbconnectFailure($db, $dsnerr) {
     150  echo "<b>error accessing database</b><br>\n";
     151  echo "<b>tried $dsnerr</b><br>\n";
     152  $result = $db->getMessage();
     153  echo "$result<br>";
     154  menu_end();
     155}
     156
     157# return true/false for an error
    131158function dberror ($db) {
    132159  global $DBI;
     
    137164  if ($DBI == "DB") {
    138165    $dberr = DB::isError($db);
     166  }
     167  if ($DBI == "PDO") {
     168    if ($db == null) {
     169      $dberr = 1;
     170    } else {
     171      $dberr = 0;
     172    }
    139173  }
    140174
Note: See TracChangeset for help on using the changeset viewer.