private static function execSQL($sql, $params, $returnMode) { $mysqli = self::getInstance(); if (!($stmt = $mysqli->prepare($sql))) { return false; } if ($params !== array()) { call_user_func_array(array($stmt, 'bind_param'), self::refValues($params)); } $stmt->execute(); switch ($returnMode) { case QUERY_RETURN_ROWS_AFFECTED: $result = $mysqli->affected_rows; break; case QUERY_RETURN_INSERT_ID: $result = $stmt->insert_id; break; case QUERY_RETURN_DATA_ARRAY: $meta = $stmt->result_metadata(); while ($field = $meta->fetch_field()) { $parameters[] =& $row[$field->name]; } call_user_func_array(array($stmt, 'bind_result'), self::refValues($parameters)); $results = array(); while ($stmt->fetch()) { $x = array(); foreach ($row as $key => $val) { $x[$key] = $val; } $results[] = $x; } $result = $results; break; default: $result = array(); break; } $error = $mysqli->error; if ($error != "") { self::$lasterror = $error; } $stmt->close(); self::closeConnection(); return $error != "" ? false : $result; }