From 50cdbbe415f3f446353e03f81d7443381fb7cd08 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Mon, 24 Mar 2025 14:41:08 +0100 Subject: [PATCH] Non-MySQL: Better field types in SQL command --- adminer/drivers/mssql.inc.php | 2 +- adminer/drivers/mysql.inc.php | 2 +- adminer/drivers/sqlite.inc.php | 4 ++-- adminer/include/pdo.inc.php | 5 +++-- plugins/drivers/imap.php | 2 +- plugins/drivers/mongo.php | 2 +- plugins/drivers/simpledb.php | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 4266de45..387d502f 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -140,7 +140,7 @@ if (isset($_GET["mssql"])) { $field = $this->fields[$this->offset++]; $return = new \stdClass; $return->name = $field["Name"]; - $return->type = ($field["Type"] == 1 ? 254 : 0); + $return->type = ($field["Type"] == 1 ? 254 : 15); $return->charsetnr = 0; return $return; } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 005d28f6..5a6bd434 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -219,7 +219,7 @@ if (!defined('Adminer\DRIVER')) { } /** Fetch next field - * @return object properties: name, type (9 for number, 254 for char), charsetnr (63 for binary); optionally: table, orgtable, orgname + * @return object properties: name, type (0 number, 15 varchar, 254 char), charsetnr (63 binary); optionally: table, orgtable, orgname */ function fetch_field() { $return = mysql_fetch_field($this->result, $this->offset++); // offset required under certain conditions diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index 6beb2ff0..dc1be09c 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -70,10 +70,10 @@ if (isset($_GET["sqlite"])) { function fetch_field() { $column = $this->offset++; - $type = $this->result->columnType($column); //! map to MySQL numbers + $type = $this->result->columnType($column); return (object) array( "name" => $this->result->columnName($column), - "type" => $type, + "type" => ($type == SQLITE3_TEXT ? 15 : 0), "charsetnr" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary ); } diff --git a/adminer/include/pdo.inc.php b/adminer/include/pdo.inc.php index 8c3e103b..a03f7c1a 100644 --- a/adminer/include/pdo.inc.php +++ b/adminer/include/pdo.inc.php @@ -93,8 +93,9 @@ if (extension_loaded('pdo')) { function fetch_field() { $row = (object) $this->getColumnMeta($this->_offset++); - $row->type = $row->pdo_type; //! map to MySQL numbers - $row->charsetnr = (isset($row->flags) && in_array("blob", (array) $row->flags) ? 63 : 0); + $type = $row->pdo_type; + $row->type = ($type == \PDO::PARAM_INT ? 0 : 15); + $row->charsetnr = ($type == \PDO::PARAM_LOB || (isset($row->flags) && in_array("blob", (array) $row->flags)) ? 63 : 0); return $row; } diff --git a/plugins/drivers/imap.php b/plugins/drivers/imap.php index e680598a..be130035 100644 --- a/plugins/drivers/imap.php +++ b/plugins/drivers/imap.php @@ -139,7 +139,7 @@ if (isset($_GET["imap"])) { function fetch_field() { $field = current($this->fields); next($this->fields); - return ($field != '' ? (object) array('name' => $field, 'type' => 0, 'charsetnr' => 0) : false); + return ($field != '' ? (object) array('name' => $field, 'type' => 15, 'charsetnr' => 0) : false); } } } diff --git a/plugins/drivers/mongo.php b/plugins/drivers/mongo.php index 62586071..8a8d721f 100644 --- a/plugins/drivers/mongo.php +++ b/plugins/drivers/mongo.php @@ -112,7 +112,7 @@ if (isset($_GET["mongo"])) { $name = $keys[$this->offset++]; return (object) array( 'name' => $name, - 'type' => 0, + 'type' => 15, 'charsetnr' => $this->charset[$name], ); } diff --git a/plugins/drivers/simpledb.php b/plugins/drivers/simpledb.php index 73918268..28de7c93 100644 --- a/plugins/drivers/simpledb.php +++ b/plugins/drivers/simpledb.php @@ -112,7 +112,7 @@ if (isset($_GET["simpledb"])) { function fetch_field() { $keys = array_keys($this->rows[0]); - return (object) array('name' => $keys[$this->offset++], 'type' => 0, 'charsetnr' => 0); + return (object) array('name' => $keys[$this->offset++], 'type' => 15, 'charsetnr' => 0); } } }