getConn(); $query = "SHOW TABLES"; $stmt = $pdo->prepare($query); $stmt->execute(); $tables = $stmt->fetchAll(\PDO::FETCH_COLUMN); return $tables; } catch (\PDOException $e) { error_log($e->getMessage()); return []; } } /** * @param string $string * * @return array|bool */ public static function query( $string = self::PLACE_NO_QUERY ): array|bool { if(!strstr($string, IOdbc::PLACE_SQL_UPDATE)) { if(!strstr($string, IOdbc::PLACE_SQL_INSERT)) { $query = parent::getInstance( self::getSettingsSection() )->getConn()->query( $string ); while($row = $query->fetch()) { $keys = array_keys($row); for($i=0;sizeof($keys)>$i;$i += 2) { $row_values[] = $row[$keys[$i]]; $key_values[] = $keys[$i]; } $result = array_combine($key_values, $row_values); } return $result; } } else { $query = parent::getInstance( self::getSettingsSection() )->getConn(); return $query->exec($string); } } /** * @return array */ private static function convertFetchToAssociative( array $result ): array { $resultset = []; if(array_key_exists(0, $result)) { foreach($result as $rowset) { $set = []; foreach($rowset as $key=>$row) { if(!is_numeric($key)) { $set[$key] = $row; } } $resultset[] = $set; } } else { foreach($result as $key=>$row) { if(!is_numeric($row)) { $resultset[$key] = $row; } } } return $resultset; } /** * @param string $string * @param bool $associative * @return array */ public static function queryString( $string = self::PLACE_NO_QUERY, $associative = false ) { $query = parent::getInstance( self::getSettingsSection() )->getConn()->query( $string ); if(!$associative) { return $query->fetchAll(); } else { return self::convertFetchToAssociative($query->fetchAll()); } } /** * @param string $tablename * @param array $fieldAndValue * @param false $sortOrder * @return array */ public static function selectDatasetByFieldAndValue($tablename = self::PLACE_TABLE_NAME, $fieldAndValue = array(), $sortOrder = false ) { if(is_array($sortOrder)) { $result = parent::getInstance( self::getSettingsSection() )->getConn()->query("SELECT * FROM " . $tablename . " WHERE " . $fieldAndValue['name'] . " = '" . $fieldAndValue['value'] . " ORDER BY ".$sortOrder['field']." ". $sortOrder['order'] ."';"); } else { $result = parent::getInstance( self::getSettingsSection() )->getConn()->query("SELECT * FROM " . $tablename . " WHERE " . $fieldAndValue['name'] . " = '" . $fieldAndValue['value'] . "';"); } return self::convertFetchToAssociative($result->fetchAll()); } /** * @param string $tablename * @param string $column_name * @param string $parameter_name * @param string $field_name * @param string $where_value */ public static function updateColumnByFieldWhere( $tablename = self::PLACE_TABLE_NAME, $column_name = IMysql::PLACE_COLUMN_NAME, $parameter_name = IMysql::PLACE_SEARCH_TERM, $field_name = IMysql::PLACE_FIELD_NAME, $where_value = IMysql::PLACE_WHERE_VALUE ) { $statement = parent::getInstance( self::getSettingsSection() )->getConn(); $query = "UPDATE " . $tablename . " SET " . $column_name . " = :" . $column_name . " WHERE " . $field_name . " = :". $field_name; $insert = $statement->prepare($query); $insert->bindParam( ':'.$column_name, $parameter_name ); $insert->bindParam( ':'.$field_name, $where_value ); $insert->execute(); } /** * @desc Update a row in a database table by its primary key ID. * * @param string $tableName The name of the table to update. * @param array $data An associative array where keys are column names and values are the new values for those columns. * @param int $id The value of the primary key for the row to update. * * @return bool Returns true on success or false on failure. */ public static function updateRowById(string $tableName, array $columnNames, array $data, int $id): bool { try { // Inside a method of the mysql.db.php class or its subclass $validTables = self::loadTableNames(); // Validate the table name if (!in_array($tableName, $validTables, true)) { throw new \InvalidArgumentException("FATAL ERROR in main CORE updateRowById: Invalid table name: {$tableName}"); } // Validate column names foreach (array_keys($data) as $column) { if (!in_array($column, $columnNames, true)) { throw new \InvalidArgumentException("FATAL ERROR in main CORE updateRowById: Invalid column name: {$column}"); } } // Get PDO instance $pdo = parent::getInstance(self::getSettingsSection())->getConn(); // Fetch the primary key field name $queryPrimaryKey = "SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = :tableName AND COLUMN_KEY = 'PRI' LIMIT 1;"; $stmtPrimaryKey = $pdo->prepare($queryPrimaryKey); $stmtPrimaryKey->bindValue(':tableName', $tableName); $stmtPrimaryKey->execute(); $primaryKeyResult = $stmtPrimaryKey->fetch(\PDO::FETCH_ASSOC); if (!$primaryKeyResult) { throw new \RuntimeException('FATAL ERROR in main CORE updateRowById: No primary key found for table ' . $tableName); } $primaryKeyField = $primaryKeyResult['COLUMN_NAME']; $query = "UPDATE " . $tableName . " SET "; $updateParts = []; foreach ($data as $column => $value) { $updateParts[] = $column . " = :" . $column; } $query .= implode(', ', $updateParts); $query .= " WHERE " . $primaryKeyField . " = :primaryKeyValue"; $stmt = $pdo->prepare($query); foreach ($data as $column => $value) { $stmt->bindValue(':' . $column, $value); } $stmt->bindValue(':primaryKeyValue', $id); return $stmt->execute(); } catch (\PDOException $e) { error_log($e->getMessage()); return false; } } /** * @param string $tablename * @param bool $id * @return array */ public static function fetchRowInArrayById($tablename = self::PLACE_TABLE_NAME, $id = self::NO_ID ) { $result = array(); $statement = parent::getInstance( self::getSettingsSection() )->getConn(); $describe = $statement->query('DESC ' . $tablename); $describe->execute(); $tableInformation = $describe->fetchAll( \PDO::FETCH_ASSOC ); foreach ( $tableInformation as $entry ) { if( $entry["Key"] == IMysql::PLACE_PRIMARY_KEY ) { $id_name = $entry["Field"]; } } $prepare = $statement->prepare("SELECT * FROM " . $tablename . " WHERE " . $id_name . " = :" . $id_name . ";"); $prepare->bindParam(":".$id_name, $id, \PDO::PARAM_INT); $prepare->execute(); $fetchAll = $prepare->fetchAll(); $rowset = array_shift($fetchAll); foreach(array_keys($rowset) as $entry) { if(is_string($entry)) { $result[$entry] = $rowset[$entry]; } } return $result; } /** * @desc selects the given table row by given parameter and column * @param string $tablename * @param string $column_name * @param string $parameter_name * @return mixed */ public static function fetchRowInArrayByWhere($tablename = IMysql::PLACE_TABLE_NAME, $column_name = IMysql::PLACE_COLUMN_NAME, $parameter_name = IMysql::PLACE_SEARCH_TERM) { $statement = parent::getInstance( self::getSettingsSection() )->getConn(); $prepare = $statement->prepare("SELECT * FROM " . $tablename . " WHERE " . $column_name . " = :" . $column_name . ";"); $prepare->bindParam(":".$column_name, $parameter_name, \PDO::PARAM_STR); $prepare->execute(); $r = $prepare->fetchAll(); $rowset = array_shift( $r ); try{ if(is_array($rowset)) { if(sizeof($rowset)>0) { foreach(array_keys($rowset) as $entry) { if(is_string($entry)) { $result[$entry] = $rowset[$entry]; } } return $result; } } else { return false; } } catch (\Exception $e) { echo '
';
print_r($e);
echo '';
die();
}
}
/**
* @desc selects the given table row by given parameter and column
* @param string $tablename
* @param string $column_name
* @param string $parameter_name
* @return mixed
*/
public static function fetchRowsInArrayByWhere($tablename = IMysql::PLACE_TABLE_NAME,
$column_name = IMysql::PLACE_COLUMN_NAME,
$parameter_name = IMysql::PLACE_SEARCH_TERM)
{
$statement = parent::getInstance( self::getSettingsSection() )->getConn();
$result = [];
$prepare = $statement->prepare("SELECT * FROM " . $tablename . " WHERE " . $column_name . " = :" . $column_name . ";");
$prepare->bindParam(":".$column_name, $parameter_name, \PDO::PARAM_STR);
$prepare->execute();
$r = $prepare->fetchAll();
foreach($r as $key=>$item)
{
foreach ($item as $index=>$field)
{
if(!is_numeric($index))
{
$result[$key][$index] = $field;
}
}
}
return $result;
}
/**
* @return int|string
*/
public static function getLastInsertedID()
{
return parent::getInstance( self::getSettingsSection() )->getConn()->lastInsertId();
}
/**
* @param string $tablename
* @param string $limit
* @param string $order
* @return array|mixed
*/
public static function fetchTableAsArray( $tablename = self::PLACE_TABLE_NAME, $limit = self::PLACE_QUERY_LIMIT, $order = self::PLACE_SORT_ORDER )
{
if($limit != self::PLACE_QUERY_LIMIT)
{
if( $order == self::PLACE_SORT_ORDER )
{
$order = "";
}
if(is_array($limit))
{
if(array_key_exists('start', $limit))
{
$statement = parent::getInstance( self::getSettingsSection() )->getConn()->query('SELECT * FROM ' . $tablename . $order . ' LIMIT ' . $limit['start'] . ', ' . $limit['end'] . ';' );
}
}
else
{
$statement = parent::getInstance( self::getSettingsSection() )->getConn()->query('SElECT * FROM ' . $tablename . $order . ' LIMIT ' . $limit . ';');
}
}
else
{
$statement = parent::getInstance( self::getSettingsSection() )->getConn()->query('SElECT * FROM ' . $tablename);
}
$statement->execute();
$result = $statement->fetchAll( \PDO::FETCH_ASSOC );
return $result;
}
/**
* @desc will insert the array with fieldnames into the database, if the last parameter is set it should be a string containing the
* fieldname that should be encrypted
* @param string $tablename
* @param string $array_name
* @param bool $encrypted
* @return bool
*/
public static function insertArrayIntoTable( $tablename = IMysql::PLACE_TABLE_NAME, $array_name = IMysql::PLACE_ARRAY_NAME, $encrypted = IMysql::PLACE_DES_ENCRYPT ): bool
{
$statement = parent::getInstance( self::getSettingsSection() )->getConn();
if(is_array($array_name))
{
if(array_key_exists(0, $array_name))
{
foreach( $array_name as $entry )
{
$field_names = array_keys( $entry );
$numItems = sizeof( $field_names );
$i = 0;
$row = " ( ";
foreach( $field_names as $field )
{
if( ++$i === $numItems )
{
$row .= $field;
}
else
{
$row .= $field . ", ";
}
}
$i = 0;
$row .= " ) VALUES ( ";
foreach ( $field_names as $field )
{
if( ++$i === $numItems )
{
if($field == $encrypted)
{
$row .= "DES_ENCRYPT(:".$encrypted.", :key)";
}
else
{
$row .= ":" . $field ;
}
}
else
{
if($field == $encrypted)
{
$row .= "DES_ENCRYPT(:".$encrypted.", :key), ";
}
else
{
$row .= ":" . $field . ", ";
}
}
}
$row .= " )";
$query = $statement->prepare('INSERT INTO ' . $tablename . $row);
if($encrypted)
{
$array_name['key'] = Config::getInstance()->getConfig()[View::NIBIRU_SECURITY]["password_hash"];
}
return $query->execute( $entry );
}
}
else
{
$field_names = array_keys($array_name);
$numItems = sizeof($field_names);
$i = 0;
$row = " ( ";
foreach( $field_names as $field )
{
if( ++$i === $numItems )
{
$row .= $field;
}
else
{
$row .= $field . ", ";
}
}
$row .= " ) VALUES ( ";
$i = 0;
foreach ( $field_names as $field )
{
if( ++$i === $numItems )
{
if($field == $encrypted)
{
$row .= "DES_ENCRYPT(:".$encrypted.", :key)";
}
else
{
$row .= ":" . $field ;
}
}
else
{
if($field == $encrypted)
{
$row .= "DES_ENCRYPT(:".$encrypted.", :key), ";
}
else
{
$row .= ":" . $field . ", ";
}
}
}
$row .= " )";
$query = $statement->prepare('INSERT INTO ' . $tablename . $row);
if($encrypted)
{
$array_name['key'] = Config::getInstance()->getConfig()[View::NIBIRU_SECURITY]["password_hash"];
}
return $query->execute( $array_name );
}
}
}
}