dbHost = $wgRefbaseDbHost; $this->dbName = $wgRefbaseDbName; $this->dbUser = $wgRefbaseDbUser; $this->dbPass = $wgRefbaseDbPass; $this->dbRefTable = $wgRefbaseDbRefTable; $this->dbUserDataTable = $wgRefbaseDbUserDataTable; $this->dbCharset = $wgRefbaseDbCharset; $this->dbAccessMethod = $wgRefbaseDbAccessMethod; } /** * Query by serial number or cite key entry */ public function getEntry( $input, $tagTypeList, & $outputEntry, $fieldList ) { // List of fields to extract (prefix 'r.' to each element) $fieldPref = $fieldList; array_walk( $fieldPref, function ( &$value, $key) { $value="r.$value"; } ); $fieldPref = join(",", $fieldPref); $flagFound = false; for ( $i = 0; $i < count($tagTypeList) && ! $flagFound; $i++ ) { $tagType = $tagTypeList[$i]; // Query string $queryStr = ""; if ( $tagType === 'citekey' ) { $queryStr = "SELECT $fieldPref " . "FROM " . $this->dbRefTable . " r " . "INNER JOIN " . $this->dbUserDataTable . " u " . "ON r.serial = u.record_id " . "WHERE u.cite_key='$input'"; } else { $queryStr = "SELECT $fieldPref " . "FROM " . $this->dbRefTable . " r " . "WHERE r.serial='$input'"; } if ( strtolower( $this->dbAccessMethod ) === 'pdo' ) { // Connect and query $link = new PDO( 'mysql:host=' . $this->dbHost . ';dbname=' . $this->dbName . ';charset=' . $this->dbCharset, $this->dbUser, $this->dbPass ); $dbexec = $link->prepare( $queryStr ); try { // Perform query $outputEntry = $dbexec->execute(); } catch( PDOException $ex ) { $outputEntry = wfMessage( 'refbase-error-dbquery' )->text() . $ex->getMessage(); return false; } $outputEntry = $dbexec->fetch(PDO::FETCH_ASSOC); } elseif ( strtolower( $this->dbAccessMethod ) === 'mysql' ) { $link = mysqli_connect( $this->dbHost, $this->dbUser, $this->dbPass, $this->dbName ) or die("db error"); if ( !$link ) { $outputEntry = wfMessage( 'refbase-error-mysqlconn' )->text(); return false; } $result = mysqli_query($link, $queryStr ); if ( !$result ) { $outputEntry = wfMessage( 'refbase-error-dbquery' )->text() . mysqli_error($link); return false; } $outputEntry = mysqli_fetch_array($result); } if ( !empty( $outputEntry ) ) { $flagFound = true; } } if ( empty( $outputEntry ) ) { $outputEntry = wfMessage( 'refbase-error-notfound' )->text(); return false; } return true; } }