/** * @return mixed * */ public static function query() { $numArgs = func_num_args(); if (!$numArgs) { return false; } $mysqli = Database::getMysqli(); if ($numArgs == 1) { $stmt = $mysqli->prepare(func_get_arg(0)); if (!$stmt) { Logger::log('$mysqli->prepare failed (%s) (query="%s").', $mysqli->error, func_get_arg(0)); return false; } $stmt->execute(); if ($stmt->errno) { Logger::log('$mysqli->execute failed (%s).', $stmt->error); return false; } $result = Database::fetch($stmt); $stmt->close(); return $result; } // if the number of arguments is more than two $type = ""; $arguments = array(); for ($i = 1; $i < $numArgs; $i++) { /* * * TODO: * better error handling for invalid types * */ $argument = func_get_arg($i); array_push($arguments, $argument); switch (gettype($argument)) { case "string": $type .= 's'; break; case "NULL": $type .= 's'; break; case "double": $type .= 'd'; break; case "integer": $type .= 'i'; break; case "boolean": $type .= 'i'; break; default: return false; break; } } array_unshift($arguments, $type); $stmt = $mysqli->prepare(func_get_arg(0)); if (!$stmt) { Logger::log('$mysqli->prepare failed (%s) (query="%s").', $mysqli->error, func_get_arg(0)); return false; } if (!call_user_func_array(array($stmt, "bind_param"), CommonUtil::arrayToReferences($arguments))) { Logger::log('$mysqli->bind_param failed.'); return false; } $stmt->execute(); if ($stmt->errno) { Logger::log('$mysqli->execute failed (%s).', $stmt->error); return false; } if ($stmt->affected_rows == -1) { $result = Database::fetch($stmt); } else { $result = $stmt->insert_id; } $stmt->close(); return $result; }