code: protected function substituteSQLOperationPlaceholders($sqloperation)
    {
      $sql_value=$sqloperation->toSQLString();
      if (count($sqloperation->getPlaceholderValues())>0) {
        // there are placeholders
        // replace each questionmark by a placeholder value
        $startpos=0;
        $sql_value_replaced='';
        foreach ($sqloperation->getPlaceholderValues() as $avalue) {
          // find the questionmark
          $qpos=strpos($sql_value, '?', $startpos);
          // copy everything after the last question mark till this questionmark in the new string
          $sql_value_replaced.=substr( $sql_value, $startpos, $qpos );
          // append the replacement for the questionmark
          $sql_value_replaced.=$this->db->Quote($avalue);
          // start searching for questionmarks after this questionmark
          $startpos=$qpos+1;
        }
        // and add the rest of the string
        $sql_value_replaced.=substr( $sql_value, $startpos );
        $sql_value=$sql_value_replaced;
      }
      return $sql_value;
    }
docs: Substitute questionmarks in SQLOperation with values
  
  @param Web2All_Table_SQLOperation $sqloperation
  @return string