[web API] pwg.images.search returns an error when called with f_* parameters #314

Open
opened 2026-10-04 23:51:46 +02:00 by adam · 1 comment
Owner

Reported by thimo on 13 Feb 2013 18:47

Version: 2.4.6

pwg.images.search returns an error when called with at least two f_* parameters (eg. f_min_date_available and f_max_date_available):

Warning: [mysql error 1241] Operand should contain 1 column(s)

SELECT i.id,
MATCH(i.name, i.comment) AGAINST( 'myquery' IN BOOLEAN MODE) AS weight
FROM images i
WHERE (MATCH(i.name, i.comment) AGAINST( 'myquery' IN BOOLEAN MODE)
OR (CONVERT(file, CHAR) LIKE '%myquery%'))
AND (i.date_available>='2013-02-10',i.date_available<'2013-02-13')
AND 1 = 1 in /piwigo/include/dblayer/functions_mysql.inc.php on line 770

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /piwigo/include/dblayer/functions_mysql.inc.php on line 153

FIX
/include/ws_functions.inc.php - line 1280:

$search_result = get_quick_search_results($params['query'],
$super_order_by,

  •  implode(&#039;,&#039;, $where_clauses)
    
  •  implode(&#039; AND &#039;, $where_clauses)
    
    );

Also some limits are handled wrong (function ws_std_image_sql_filter):

function ws_std_image_sql_filter( $params, $tbl_name='' )
{
$clauses = array();
if ( is_numeric($params['f_min_rate']) )
{

  • $clauses[] = $tbl_name.'rating_score>'.$params['f_min_rate'];
  • $clauses[] = $tbl_name.'rating_score>='.$params['f_min_rate'];
    }
    if ( is_numeric($params['f_max_rate']) )
    {
    $clauses[] = $tbl_name.'rating_score<='.$params['f_max_rate'];
    }
    if ( is_numeric($params['f_min_hit']) )
    {
  • $clauses[] = $tbl_name.'hit>'.$params['f_min_hit'];
  • $clauses[] = $tbl_name.'hit>='.$params['f_min_hit'];
    }
    if ( is_numeric($params['f_max_hit']) )
    {
    $clauses[] = $tbl_name.'hit<='.$params['f_max_hit'];
    }
    if ( isset($params['f_min_date_available']) )
    {
    $clauses[] = $tbl_name."date_available>='".$params['f_min_date_available']."'";
    }
    if ( isset($params['f_max_date_available']) )
    {
  • $clauses[] = $tbl_name."date_available<'".$params['f_max_date_available']."'";
  • $clauses[] = $tbl_name."date_available<='".$params['f_max_date_available']."'";
    }
    if ( isset($params['f_min_date_created']) )
    {
    $clauses[] = $tbl_name."date_creation>='".$params['f_min_date_created']."'";
    }
    if ( isset($params['f_max_date_created']) )
    {
  • $clauses[] = $tbl_name."date_creation<'".$params['f_max_date_created']."'";
  • $clauses[] = $tbl_name."date_creation<='".$params['f_max_date_created']."'";
    }
    if ( is_numeric($params['f_min_ratio']) )
    {
  • $clauses[] = $tbl_name.'width/'.$tbl_name.'height>'.$params['f_min_ratio'];
  • $clauses[] = $tbl_name.'width/'.$tbl_name.'height>='.$params['f_min_ratio'];
    }
    if ( is_numeric($params['f_max_ratio']) )
    {
    $clauses[] = $tbl_name.'width/'.$tbl_name.'height<='.$params['f_max_ratio'];
    }
    if (is_numeric($params['f_max_level']) )
    {
    $clauses[] = $tbl_name.'level <= '.$params['f_max_level'];
    }
    return $clauses;
    }

Piwigo Bugtracker #2846

**Reported by thimo on 13 Feb 2013 18:47** **Version:** 2.4.6 pwg.images.search returns an error when called with at least two f_\* parameters (eg. f_min_date_available and f_max_date_available): Warning: [mysql error 1241] Operand should contain 1 column(s) SELECT i.id, MATCH(i.name, i.comment) AGAINST( &#039;myquery&#039; IN BOOLEAN MODE) AS weight FROM images i WHERE (MATCH(i.name, i.comment) AGAINST( &#039;myquery&#039; IN BOOLEAN MODE) OR (CONVERT(file, CHAR) LIKE &#039;%myquery%&#039;)) AND (i.date_available&gt;=&#039;2013-02-10&#039;,i.date_available&lt;&#039;2013-02-13&#039;) AND 1 = 1 in /piwigo/include/dblayer/functions_mysql.inc.php on line 770 Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /piwigo/include/dblayer/functions_mysql.inc.php on line 153 FIX /include/ws_functions.inc.php - line 1280: $search_result = get_quick_search_results($params[&#039;query&#039;], $super_order_by, - implode(&#039;,&#039;, $where_clauses) - implode(&#039; AND &#039;, $where_clauses) ); Also some limits are handled wrong (function ws_std_image_sql_filter): function ws_std_image_sql_filter( $params, $tbl_name=&#039;&#039; ) { $clauses = array(); if ( is_numeric($params[&#039;f_min_rate&#039;]) ) { - $clauses[] = $tbl_name.&#039;rating_score&gt;&#039;.$params[&#039;f_min_rate&#039;]; - $clauses[] = $tbl_name.&#039;rating_score&gt;=&#039;.$params[&#039;f_min_rate&#039;]; } if ( is_numeric($params[&#039;f_max_rate&#039;]) ) { $clauses[] = $tbl_name.&#039;rating_score&lt;=&#039;.$params[&#039;f_max_rate&#039;]; } if ( is_numeric($params[&#039;f_min_hit&#039;]) ) { - $clauses[] = $tbl_name.&#039;hit&gt;&#039;.$params[&#039;f_min_hit&#039;]; - $clauses[] = $tbl_name.&#039;hit&gt;=&#039;.$params[&#039;f_min_hit&#039;]; } if ( is_numeric($params[&#039;f_max_hit&#039;]) ) { $clauses[] = $tbl_name.&#039;hit&lt;=&#039;.$params[&#039;f_max_hit&#039;]; } if ( isset($params[&#039;f_min_date_available&#039;]) ) { $clauses[] = $tbl_name.&quot;date_available&gt;=&#039;&quot;.$params[&#039;f_min_date_available&#039;].&quot;&#039;&quot;; } if ( isset($params[&#039;f_max_date_available&#039;]) ) { - $clauses[] = $tbl_name.&quot;date_available&lt;&#039;&quot;.$params[&#039;f_max_date_available&#039;].&quot;&#039;&quot;; - $clauses[] = $tbl_name.&quot;date_available&lt;=&#039;&quot;.$params[&#039;f_max_date_available&#039;].&quot;&#039;&quot;; } if ( isset($params[&#039;f_min_date_created&#039;]) ) { $clauses[] = $tbl_name.&quot;date_creation&gt;=&#039;&quot;.$params[&#039;f_min_date_created&#039;].&quot;&#039;&quot;; } if ( isset($params[&#039;f_max_date_created&#039;]) ) { - $clauses[] = $tbl_name.&quot;date_creation&lt;&#039;&quot;.$params[&#039;f_max_date_created&#039;].&quot;&#039;&quot;; - $clauses[] = $tbl_name.&quot;date_creation&lt;=&#039;&quot;.$params[&#039;f_max_date_created&#039;].&quot;&#039;&quot;; } if ( is_numeric($params[&#039;f_min_ratio&#039;]) ) { - $clauses[] = $tbl_name.&#039;width/&#039;.$tbl_name.&#039;height&gt;&#039;.$params[&#039;f_min_ratio&#039;]; - $clauses[] = $tbl_name.&#039;width/&#039;.$tbl_name.&#039;height&gt;=&#039;.$params[&#039;f_min_ratio&#039;]; } if ( is_numeric($params[&#039;f_max_ratio&#039;]) ) { $clauses[] = $tbl_name.&#039;width/&#039;.$tbl_name.&#039;height&lt;=&#039;.$params[&#039;f_max_ratio&#039;]; } if (is_numeric($params[&#039;f_max_level&#039;]) ) { $clauses[] = $tbl_name.&#039;level &lt;= &#039;.$params[&#039;f_max_level&#039;]; } return $clauses; } [Piwigo Bugtracker #2846](http://piwigo.org/bugs/view.php?id=2846) <!-- github-sync-id:97252289 -->
Author
Owner

Comment posted by thimo on 10 Mar 2013 12:16

The field limits are still handled incorrectly.

**Comment posted by thimo on 10 Mar 2013 12:16** The field limits are still handled incorrectly. <!-- github-comment-id:124893023 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/Piwigo#314