Hello! We recently upgraded from Zen-Cart 1.5.6a to 1.5.8 and PHP 7.3.33 to 8.0. We are now having an issue with the search function.

It works fine when searching single words, but searching anything with a space gives a blank page with the error: “WARNING: An Error occurred, please let us know!”. The issue is the same for both the public-facing search and the admin search. In an admin search the error message is: "WARNING: An Error occurred, please let us know! If you were entering information, please press the BACK button in your browser and re-check the information you have entered to be sure you entered valid data." Searching multiple words does not result in an error message when we use quotes around the phrase, however it does not give any results for key words unless they are entered exactly as they appear in the product.

We are currently running MySQL 10.3.38-MariaDB-log.

We checked the error logs and see the following (example case searching the phrase “two words”, with some info redacted for privacy):

[11-Feb-2023 16:00:31 America/XXXXX] Request URI: /index.php?main_page=search_result&search_in_description=1&keyword=two+words, IP address: X.X.X.X, Language id 1
#1 trigger_error() called at [/home/XXXXX/public_html/includes/classes/db/mysql/query_factory.php:667]
#2 queryFactory->show_error() called at [/home/XXXXX/public_html/includes/classes/db/mysql/query_factory.php:634]
#3 queryFactory->set_error() called at [/home/XXXXX/public_html/includes/classes/db/mysql/query_factory.php:275]
#4 queryFactory->Execute() called at [/home/XXXXX/public_html/includes/classes/split_page_results.php:105]
#5 splitPageResults->__construct() called at [/home/XXXXX/public_html/includes/modules/pages/search_result/header_php.php:459]
#6 require(/home/XXXXX/public_html/includes/modules/pages/search_result/header_php.php) called at [/home/XXXXX/public_html/index.php:35]
--> PHP Fatal error: 1064:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'OR pd.products_name LIKE '%words%' OR p.products_model LIKE '%words%' OR m...' at line 1 :: select count(distinct p.products_id) as total FROM (products p LEFT JOIN manufacturers m USING(manufacturers_id), products_description pd, categories c, products_to_categories p2c ) LEFT JOIN meta_tags_products_description mtpd ON (mtpd.products_id= p2c.products_id AND mtpd.language_id = 1) WHERE (p.products_status = 1 AND p.products_id = pd.products_id AND pd.language_id = 1 AND p.products_id = p2c.products_id AND p2c.categories_id = c.categories_id AND ( ( pd.products_name LIKE '%two%' OR p.products_model LIKE '%two%' OR m.manufacturers_name LIKE '%two%' OR mtpd.metatags_keywords LIKE '%two%' OR mtpd.metatags_description LIKE '%two%' OR pd.products_description LIKE '%two%') AND ( OR pd.products_name LIKE '%words%' OR p.products_model LIKE '%words%' OR m.manufacturers_name LIKE '%words%' OR mtpd.metatags_keywords LIKE '%words%' OR mtpd.metatags_description LIKE '%words%' OR pd.products_description LIKE '%words%') )) ==> (as called by) /home/XXXXX/public_html/includes/classes/split_page_results.php on line 105 <== in /home/XXXXX/public_html/includes/classes/db/mysql/query_factory.php on line 667.

We haven't modified any of the files that are mentioned in the error log. We're not sure where to look next at this stage... any help would be greatly appreciated!