array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT), /// ':attributeId'=> array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT) ) /// @param $someOption public static function query($aQueryString, $aBindArray = [], $someOptions = []) { // var_dump($aQueryString, $aBindArray); // Standardbelegungen if (empty($someOptions['dbCharset'])) { $someOptions['dbCharset'] = 'ISO-8859-1'; } if (empty($someOptions['outCharset'])) { $someOptions['outCharset'] = 'UTF-8'; } if (empty($someOptions['dontFetch'])) { $someOptions['dontFetch'] = false; } $ignoreErrors = $someOptions['ignoreErrors'] ?? false; /// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss /// doch auch die Eingabe konvertiert werden. Aber das jetzt /// umzustellen wird schwer! Die User im Wettkampfplaner sind ja z.B. /// als UTF8 in latin1(?) gespeichert. /// @toDo: Die Standardwerte sollten vielleicht aus einer config /// kommen, nicht hardcoded try { $pdoStatement = self::$db->prepare($aQueryString); foreach ($aBindArray as $bindName => $bind) { if ($bind['data_type'] == PDO::PARAM_STR) { $bind['value'] = iconv( $someOptions['outCharset'], $someOptions['dbCharset'], $bind['value'] ); } $pdoStatement->bindValue( $bindName, $bind['value'], (isset($bind['data_type']) ? $bind['data_type'] : PDO::PARAM_STR) ); } $pdoResult = $pdoStatement->execute(); if (!$ignoreErrors && !$pdoResult) { echo("Error during dbQuery!\n"); echo("DB-Error:\n"); var_dump(self::$db->errorInfo()); } if ($someOptions['dontFetch']) { $ret = null; } else { $ret = $pdoStatement->fetchAll(PDO::FETCH_ASSOC); } } catch(PDOException $db_error) { print 'Error!: ' . $db_error->getMessage() . '
'; return null; } // Zeichensatzkonvertierung if (is_array($ret)) { foreach ($ret as &$entry) { array_walk( $entry, function (&$value, $key, $someOptions) { $value = iconv($someOptions['dbCharset'], $someOptions['outCharset'], $value); }, $someOptions ); } } return $ret; } // @todo docu public static function getLastInsertId() { return self::$db->lastInsertId(); } // get a Connection to the database private static function connectToPdo($hostname, $dbName, $user, $password) { // var_dump($hostname, $dbName, $user, $password); $dbConnection = null; try { $dbConnection = new PDO( 'mysql:host=' . $hostname . ';dbname=' . $dbName, $user, $password ); } catch(PDOException $dbError) { echo('Error whilst getting a dbConnection!: ' . $dbError->getMessage()); } return $dbConnection; } // set the dbConnection (just setting, no establishing) private static function setDbConnection($dbConnection) { $success = false; if ($dbConnection instanceof PDO) { self::$db = $dbConnection; $success = true; } else { self::$db = null; } return $success; } public static function debugEchoQuery($query, $params) { foreach ($params as $key => $value) { switch($value['data_type']) { case PDO::PARAM_STR:{ $query = str_replace($key, '\'' . $value['value'] . '\'', $query); } default:{ $query = str_replace($key, $value['value'], $query); } } }; echo('query: ' . $query . PHP_EOL); } }