$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');
}
$return = @$this->real_connect(
- ($server != "" ? $host : ini_get("mysqli.default_host")),
- ($server . $username != "" ? $username : ini_get("mysqli.default_user")),
- ($server . $username . $password != "" ? $password : ini_get("mysqli.default_pw")),
+ ($server != "" ? $host : null),
+ ($server . $username != "" ? $username : null),
+ ($server . $username . $password != "" ? $password : null),
$database,
- (is_numeric($port) ? $port : ini_get("mysqli.default_port")),
+ (is_numeric($port) ? intval($port) : null),
(!is_numeric($port) ? $port : $socket),
($ssl ? ($ssl['verify'] !== false ? 2048 : 64) : 0) // 2048 - MYSQLI_CLIENT_SSL, 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)
);
/** Get table indexes
* @param string
- * @param string Db to use
+ * @param ?Db
* @return Index[]
*/
function indexes($table, $connection2 = null) {
* @param string "" to create
* @param string new name
* @param list<array{string, list<string>, string}> of [$orig, $process_field, $after]
- * @param list<string>
+ * @param string[]
* @param string
* @param string
* @param string
}
/** Kill a process
- * @param int
+ * @param numeric-string
* @return Result|bool
*/
function kill_process($val) {
/** Print one row in JSON object
* @param string or "" to close the object
-* @param string
+* @param string|int
* @return void
*/
function json_row($key, $val = null) {
/** Print table interior for fields editing
* @param Field[]
-* @param list<string>[]
+* @param list<string>
* @param string TABLE or PROCEDURE
* @param Field[] returned by referencable_primary()
* @return void
}
/** Callback used in routine()
-* @param list<array>
+* @param list<string>
* @return string
*/
function normalize_enum($match) {
- return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($match[0][0] . $match[0][0], $match[0][0], substr($match[0], 1, -1))), '\\')) . "'";
+ $val = $match[0];
+ return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($val[0] . $val[0], $val[0], substr($val, 1, -1))), '\\')) . "'";
}
/** Issue grant or revoke commands
}
/** Check if connection has at least the given version
-* @param string required version
-* @param string required MariaDB version
+* @param string|float required version
+* @param string|float required MariaDB version
* @param Db defaults to $connection
* @return bool
*/
global $connection;
$return = array();
foreach ((array) $where["where"] as $key => $val) {
- $key = bracket_escape($key, 1); // 1 - back
+ $key = bracket_escape($key, true); // true - back
$column = escape_key($key);
$field = idx($fields, $key, array());
$field_type = $field["type"];
}
/** Format decimal number
-* @param int
+* @param float|numeric-string
* @return string
*/
function format_number($val) {
}
}
foreach ((array) $_POST["fields"] as $key => $val) {
- $name = bracket_escape($key, 1); // 1 - back
+ $name = bracket_escape($key, true); // true - back
$return[$name] = array(
"field" => $name,
"privileges" => array("insert" => 1, "update" => 1, "where" => 1, "order" => 1),
* @return string 32 hexadecimal characters
*/
function rand_string() {
- return md5(uniqid(mt_rand(), true));
+ return md5(uniqid(strval(mt_rand()), true));
}
/** Format value to use in select
/** Get <input type="hidden">
* @param string
-* @param string
+* @param string|int
* @return string HTML
*/
function input_hidden($name, $value = "") {
/** Generate HTML checkbox
* @param string
-* @param string
+* @param string|int
* @param bool
* @param string
* @param string
/** Translate string
* @param literal-string
-* @param int
+* @param float|string
* @return string
*/
// this is matched by compile.php
public $plugins; ///< @var list<object> @visibility protected(set)
/** Register plugins
- * @param list<object> object instances or null to autoload plugins from adminer-plugins/
+ * @param ?list<object> object instances or null to autoload plugins from adminer-plugins/
*/
function __construct($plugins) {
if ($plugins === null) {
$where[] = where_check($unique_idf, $fields);
$return = $driver->select($TABLE, $select, $where, $select);
if ($return) {
- echo reset($return->fetch_row());
+ echo first($return->fetch_row());
}
}
exit;
foreach ($_POST["val"] as $unique_idf => $row) {
$set = array();
foreach ($row as $key => $val) {
- $key = bracket_escape($key, 1); // 1 - back
+ $key = bracket_escape($key, true); // true - back
$set[idf_escape($key)] = (preg_match('~char|text~', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
}
$result = $driver->update(
return lzw_compress($file);
}
-function compile_file($match, $callback) { // $callback only to match signature
+function compile_file($match, $callback = '') { // $callback only to match signature
global $project;
$file = "";
list(, $filenames, $callback) = $match;
parameters:
- level: 4
+ level: 5
ignoreErrors:
# need to fix
- "~^Function Adminer\\\\fields_from_edit\\(\\) should return~" # Mongo and SimpleDB
- "~^Function Adminer\\\\explain\\(\\) should return Adminer\\\\Result~" # mysqli_result
+ - "~expects array~" # different shape of array
# not real problems
- identifier: include.fileNotFound # relative includes
- "~^Method Adminer\\\\Plugins::\\w+\\(\\) with return type void~" # we use the same pattern for all methods
- "~Call to function is_object\\(\\) with Adminer\\\\Db\\|string will always evaluate to false~" # is_object(Db) is true
- "~^Comparison operation \"==\" between \\(array\\|float\\|int\\) and 1~" # it thinks that $affected could be an array
+ - "~^Parameter #2 \\$newvalue of function ini_set expects string~" # it expects string|int|float|bool|null
+ - "~expects int, float given~" # this will work
+ - "~expects bool~" # truthy values
+ - "~fread expects int<1, max>, 100000~" # 1e6
+ - "~'strlen' given~" # used as a bool callback
# it probably doesn't like $ar[$key] instead of isset($ar[$key]) and thinks that $ar[$key] is always set
- identifier: identical.alwaysFalse
Index: "array{type:string, columns:list<string>, lengths:list<numeric-string>, descs:list<?bool>}"
ForeignKey: "array{db:string, ns?:string, table:string, source:list<string>, target:list<string>, on_delete:string, on_update:string}"
Trigger: "array{Trigger?:string, Timing?:string, Event?:string, Of?:string, Type?:string, Statement?:string}"
- Routine: "array{name?:string, fields:list<array{field:string, type:string, length:?string, unsigned:string, null:bool, full_type:string, inout:string, collation:string}>, comment:string, returns?:array, definition:string, language?:string}"
+ RoutineField: "array{field:string, type:string, length:?string, unsigned:string, null:bool, full_type:string, inout:string, collation:string}"
+ Routine: "array{name?:string, fields:list<RoutineField>, comment:string, returns?:array, definition:string, language?:string}"
BackwardKey: "array{name:string, keys:string[][]}"