diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | doc/setup.rst | 14 | ||||
-rw-r--r-- | libraries/classes/InsertEdit.php | 5 | ||||
-rw-r--r-- | libraries/classes/Sql.php | 2 | ||||
-rw-r--r-- | psalm-baseline.xml | 19 | ||||
-rw-r--r-- | test/classes/InsertEditTest.php | 120 |
6 files changed, 143 insertions, 18 deletions
@@ -26,6 +26,7 @@ phpMyAdmin - ChangeLog - issue #17388 Find and Replace using regex now makes a valid query if no matching result set found - issue #17551 Enum/Set editor will not fail to open when creating a new column - issue #17659 Fix error when a database group is named tables, views, functions, procedures or events +- issue #17673 Allow empty values to be inserted into columns 5.2.0 (2022-05-10) - issue #16521 Upgrade Bootstrap to version 5 diff --git a/doc/setup.rst b/doc/setup.rst index 736592ea3e..c2b7b78928 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -88,7 +88,7 @@ Installing from Git In order to install from Git, you'll need a few supporting applications: -* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/master>`_ +* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/QA_5_2>`_ * `Composer <https://getcomposer.org/download/>`__ * `Node.js <https://nodejs.org/en/download/>`_ (version 10 or higher) * `Yarn <https://classic.yarnpkg.com/en/docs/install>`_ @@ -394,37 +394,37 @@ To connect phpMyAdmin to a given server use: .. code-block:: sh - docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin:latest To connect phpMyAdmin to more servers use: .. code-block:: sh - docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin:latest To use arbitrary server option: .. code-block:: sh - docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin:latest You can also link the database container using Docker: .. code-block:: sh - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin:latest Running with additional configuration: .. code-block:: sh - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin:latest Running with additional themes: .. code-block:: sh - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/custom/phpmyadmin/themeName/:/var/www/html/themes/themeName/ phpmyadmin:latest Using docker-compose -------------------- diff --git a/libraries/classes/InsertEdit.php b/libraries/classes/InsertEdit.php index 97b46419f2..26b16c1856 100644 --- a/libraries/classes/InsertEdit.php +++ b/libraries/classes/InsertEdit.php @@ -1664,9 +1664,8 @@ class InsertEdit } elseif ( ! (empty($multiEditFuncs[$key]) && isset($multiEditColumnsPrev[$key]) - && (($currentValue === "'" . $this->dbi->escapeString($multiEditColumnsPrev[$key]) . "'") - || ($currentValue === '0x' . $multiEditColumnsPrev[$key]))) - && $currentValue + && $currentValue === $multiEditColumnsPrev[$key]) + && $currentValueAsAnArray !== '' ) { // avoid setting a field to NULL when it's already NULL // (field had the null checkbox before the update diff --git a/libraries/classes/Sql.php b/libraries/classes/Sql.php index 6e1cd870df..faacb9be32 100644 --- a/libraries/classes/Sql.php +++ b/libraries/classes/Sql.php @@ -1431,7 +1431,7 @@ class Sql } } - $hasUnique = $table && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta); + $hasUnique = $table !== null && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta); $editable = ($hasUnique || $GLOBALS['cfg']['RowActionLinksWithoutUnique'] diff --git a/psalm-baseline.xml b/psalm-baseline.xml index a3e526e3b7..4f43b4f72a 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -3658,13 +3658,16 @@ <InvalidArgument occurrences="1"> <code>$insertErrors</code> </InvalidArgument> - <MixedArgument occurrences="28"> + <MixedArgument occurrences="31"> <code>$_POST['db']</code> <code>$_POST['rel_fields_list']</code> <code>$_POST['table']</code> <code>$_POST['transform_fields_list']</code> <code>$column_name</code> <code>$column_name</code> + <code>$current_value</code> + <code>$current_value</code> + <code>$current_value</code> <code>$errorMessages</code> <code>$extra_data</code> <code>$lastMessages</code> @@ -3710,7 +3713,7 @@ <MixedArrayOffset occurrences="1"> <code>$mimeMap[$column_name]</code> </MixedArrayOffset> - <MixedAssignment occurrences="31"> + <MixedAssignment occurrences="32"> <code>$GLOBALS['active_page']</code> <code>$GLOBALS['cfg']['InsertRows']</code> <code>$GLOBALS['disp_message']</code> @@ -3726,6 +3729,7 @@ <code>$column_name</code> <code>$column_name</code> <code>$curr_rel_field</code> + <code>$current_value</code> <code>$extra_data['row_count']</code> <code>$insertRows</code> <code>$multi_edit_auto_increment</code> @@ -3751,9 +3755,12 @@ <code>$where_clause</code> <code>$where_clause</code> </MixedOperand> - <PossiblyNullArgument occurrences="8"> + <PossiblyNullArgument occurrences="11"> <code>$GLOBALS['urlParams']</code> <code>$GLOBALS['urlParams']</code> + <code>$current_value</code> + <code>$current_value</code> + <code>$current_value</code> <code>$multi_edit_columns_null</code> <code>$multi_edit_columns_null</code> <code>$multi_edit_columns_null_prev</code> @@ -7903,7 +7910,7 @@ </file> <file src="libraries/classes/InsertEdit.php"> <LessSpecificReturnStatement occurrences="1"/> - <MixedArgument occurrences="77"> + <MixedArgument occurrences="76"> <code>$_POST['fields']['multi_edit']</code> <code>$backupField</code> <code>$columnMime['input_transformation_options']</code> @@ -7963,7 +7970,6 @@ <code>$multiEditColumnsName[$key]</code> <code>$multiEditColumnsName[$key]</code> <code>$multiEditColumnsName[$key]</code> - <code>$multiEditColumnsPrev[$key]</code> <code>$protectedRow[$multiEditColumnsName[$key]]</code> <code>$rows[$keyId]</code> <code>$singleQuery</code> @@ -8082,12 +8088,11 @@ <code>new $className()</code> <code>new $className()</code> </MixedMethodCall> - <MixedOperand occurrences="5"> + <MixedOperand occurrences="4"> <code>$_POST['where_clause'][0]</code> <code>$column['pma_type']</code> <code>$file</code> <code>$maxlength</code> - <code>$multiEditColumnsPrev[$key]</code> </MixedOperand> <MixedReturnStatement occurrences="2"> <code>$_POST['err_url']</code> diff --git a/test/classes/InsertEditTest.php b/test/classes/InsertEditTest.php index 0d0776ce62..af43d48400 100644 --- a/test/classes/InsertEditTest.php +++ b/test/classes/InsertEditTest.php @@ -2097,6 +2097,126 @@ class InsertEditTest extends AbstractTestCase ], $result ); + + // Test to see if a zero-string is not ignored + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + '0', + [], + [], + false, + [], + [], + "'0'", + [], + '0', + [] + ); + + $this->assertEquals( + [ + ["`fld` = '0'"], + [], + ], + $result + ); + + // Can only happen when table contains blob field that was left unchanged during edit + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + '', + [], + [], + false, + [], + [], + '', + [], + '0', + [] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); + + // Test to see if a field will be set to null when it wasn't null previously + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + ['on'], + '', + [], + [], + false, + [], + [], + 'NULL', + [], + '0', + [] + ); + + $this->assertEquals( + [ + ['`fld` = NULL'], + [], + ], + $result + ); + + // Test to see if a field will be ignored if it was null previously + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + ['on'], + '', + [], + [], + false, + [], + [], + 'NULL', + [], + '0', + ['on'] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); + + // Test to see if a field will be ignored if it the value is unchanged + $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, + [], + "a'b", + ["a'b"], + [], + false, + [], + [], + "'a\'b'", + [], + '0', + [] + ); + + $this->assertEquals( + [ + [], + [], + ], + $result + ); } /** |