Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22552 > unrolled thread

operatore jolly mysql

Started byEnrico Maria Chellini <bitit@bitit.it>
First post2019-02-13 12:28 +0100
Last post2019-02-21 14:38 +0100
Articles 20 on this page of 43 — 4 participants

Back to article view | Back to it.comp.www.php


Contents

  operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-13 12:28 +0100
    Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-13 16:11 +0100
      Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-13 12:30 -0800
        Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 11:30 +0100
          Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 10:42 +0000
            Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 11:48 +0100
              Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 10:54 +0000
                Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 12:00 +0100
                  Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 16:23 +0100
                    Re: operatore jolly mysql logica mente <npaolini_no_spam_@ennepisoft.it> - 2019-02-14 16:57 +0100
                      Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:11 +0000
                        Re: operatore jolly mysql logica mente <npaolini_no_spam_@ennepisoft.it> - 2019-02-14 18:41 +0100
                      Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 17:21 +0100
                        Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:48 +0000
                    Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:05 +0000
                      Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 17:41 +0100
                        Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 17:08 +0000
                          Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 18:25 +0100
                            Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 21:28 +0000
                              Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 11:01 +0100
                                Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-15 16:56 +0000
                                  Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 18:47 +0100
                                  Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 19:41 +0100
                                    Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 13:01 +0100
                                      Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 15:35 +0100
                                        Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 16:18 +0100
                      Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 12:47 +0100
                        Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 14:07 +0100
                          Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 15:08 +0100
                            Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 15:41 +0100
                              Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 07:44 -0800
                                Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 17:28 +0100
                                  Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 10:27 -0800
                                    Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 20:15 +0100
                                      Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 11:37 -0800
                                        Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 16:02 +0100
                                          Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 12:21 +0100
                                            Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-21 04:33 -0800
                                              Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 14:37 +0100
                                                Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 16:27 +0100
                                Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 12:39 +0100
                                  Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-21 04:43 -0800
                                    Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 14:38 +0100

Page 1 of 3  [1] 2 3  Next page →


#22552 — operatore jolly mysql

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-13 12:28 +0100
Subjectoperatore jolly mysql
Message-ID<20190213122856.517154c6@nntp.aioe.org>
esiste un operatore jolly mysql che mi restituisca tutti i risultati?


perchè ho da creare una serie di selezioni tipo WHERE  a=$a  AND b=$b
AND c=$c  



vorrei fare in maniera che son non ho un GET relativo specifico 
$_GET[a] mi dia tutto quello che c'è in a=?  

una sorta di:
 if (isset($_GET[a]) { $a=$_GET[a]; }
else{ $a=CARATTERE_JOLLY; }

 mi semplificherebbe molto il codice :)

Enrico 

[toc] | [next] | [standalone]


#22553

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-13 16:11 +0100
Message-ID<20190213161104.046da42f@nntp.aioe.org>
In reply to#22552
Il giorno Wed, 13 Feb 2019 12:28:56 +0100
Enrico Maria Chellini <bitit@bitit.it> ha scritto:

> esiste un operatore jolly mysql che mi restituisca tutti i risultati?
> 
> 
> perchè ho da creare una serie di selezioni tipo WHERE  a=$a  AND b=$b
> AND c=$c  
> 
> 
> 
> vorrei fare in maniera che son non ho un GET relativo specifico 
> $_GET[a] mi dia tutto quello che c'è in a=?  
> 
> una sorta di:
>  if (isset($_GET[a]) { $a=$_GET[a]; }
> else{ $a=CARATTERE_JOLLY; }
> 
>  mi semplificherebbe molto il codice :)
> 
> Enrico 
> 

Posso utilizzare LIKE % ma non mi sembra corretto quando poi richiedo un
risultato esatto.

o sbaglio?

Enrico 

[toc] | [prev] | [next] | [standalone]


#22554

Fromfmigliori <fmigliori@gmail.com>
Date2019-02-13 12:30 -0800
Message-ID<bf2560e2-311c-4544-9803-c40e731287be@googlegroups.com>
In reply to#22553
Il giorno mercoledì 13 febbraio 2019 16:11:06 UTC+1, Enrico Maria Chellini ha scritto:
> Il giorno Wed, 13 Feb 2019 12:28:56 +0100
> Enrico Maria Chellini <bitit@bitit.it> ha scritto:
> 
> > esiste un operatore jolly mysql che mi restituisca tutti i risultati?
> > 
> > 
> > perchè ho da creare una serie di selezioni tipo WHERE  a=$a  AND b=$b
> > AND c=$c  
> > 
> > 
> > 
> > vorrei fare in maniera che son non ho un GET relativo specifico 
> > $_GET[a] mi dia tutto quello che c'è in a=?  
> > 
> > una sorta di:
> >  if (isset($_GET[a]) { $a=$_GET[a]; }
> > else{ $a=CARATTERE_JOLLY; }
> > 
> >  mi semplificherebbe molto il codice :)
> > 
> > Enrico 
> > 
> 
> Posso utilizzare LIKE % ma non mi sembra corretto quando poi richiedo un
> risultato esatto.
> 
> o sbaglio?
> 
> Enrico

Non dovrebbe. Se fai "nome like 'enrico'" diventa equivalente ad un =.
Però fattelo dire, come scorciatoia è davvero bruttina :p

[toc] | [prev] | [next] | [standalone]


#22555

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 11:30 +0100
Message-ID<20190214113023.4c7665b5@nntp.aioe.org>
In reply to#22554
> > 
> > Posso utilizzare LIKE % ma non mi sembra corretto quando poi
> > richiedo un risultato esatto.
> > 
> > o sbaglio?
> > 
> > Enrico  
> 
> Non dovrebbe. Se fai "nome like 'enrico'" diventa equivalente ad un =.
> Però fattelo dire, come scorciatoia è davvero bruttina :p

appunto;  l'alternativa è riscrivere la query ogni volta che cambiano i
valori di richiesta dalla form;

esempio il cliente è interessato alla piscina allora  flagga
il ratio della piscina -> riscrivo la query 

sto cercando la maniera di scrivere una query sola che mi dia tutti i
risultati se non specificatamente richiesti alcuni parametri.

  se voglio mettere tutto con prepare-> (query) riscrivendo ogni
  query per ogni selezione 
il codice che ne viene fuori un bel po' più lungo.

sto appunto cercando qualche suggerimento. 

Enrico 

[toc] | [prev] | [next] | [standalone]


#22556

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 10:42 +0000
Message-ID<gckv04F8uu0U1@mid.individual.net>
In reply to#22555
On 14/02/2019 10:30, Enrico Maria Chellini wrote:

> sto cercando la maniera di scrivere una query sola che mi dia tutti i
> risultati se non specificatamente richiesti alcuni parametri.
> 
>    se voglio mettere tutto con prepare-> (query) riscrivendo ogni
>    query per ogni selezione
> il codice che ne viene fuori un bel po' più lungo.

Non esiste.

Per questo da 30 anni la gente scrive query builders e ORMs :)

Bye.

[toc] | [prev] | [next] | [standalone]


#22557

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 11:48 +0100
Message-ID<20190214114846.248af45e@nntp.aioe.org>
In reply to#22556
Il giorno Thu, 14 Feb 2019 10:42:04 +0000
Alessandro Pellizzari <shuriken@amiran.it> ha scritto:

> ORMs

appunto.. e se la scrivo bruttina con LIKE % quale sono le contro
indicazioni a parte l'estetica? di cui sinceramente me ne sono sempre
poco interessato. 

Enrico

[toc] | [prev] | [next] | [standalone]


#22558

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 10:54 +0000
Message-ID<gckvn6F934qU1@mid.individual.net>
In reply to#22557
On 14/02/2019 10:48, Enrico Maria Chellini wrote:

> appunto.. e se la scrivo bruttina con LIKE % quale sono le contro
> indicazioni a parte l'estetica? di cui sinceramente me ne sono sempre
> poco interessato.

Dipende dall'engine, ma quando usi LIKE attivi il partial match sulla 
stringa, che potrebbe bypassare gli indici e quindi massacrarti le 
prestazioni.

Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per 
qualche mezz'ora ad ogni query.

Bye.

[toc] | [prev] | [next] | [standalone]


#22559

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 12:00 +0100
Message-ID<20190214120055.4b5f1b19@nntp.aioe.org>
In reply to#22558
> Dipende dall'engine, ma quando usi LIKE attivi il partial match sulla 
> stringa, che potrebbe bypassare gli indici e quindi massacrarti le 
> prestazioni.
> 
> Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per 
> qualche mezz'ora ad ogni query.
> 
> Bye.

Quello che sospettavo .
ci saranno un migliaio di record al massimo; ma cercherò di scrivere
qualcosa di esteticamente migliore e più funzionale

Grazie ancora
Enrico

[toc] | [prev] | [next] | [standalone]


#22560

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 16:23 +0100
Message-ID<20190214162342.51129c53@nntp.aioe.org>
In reply to#22559
Il giorno Thu, 14 Feb 2019 12:00:55 +0100
Enrico Maria Chellini <bitit@bitit.it> ha scritto:

> > Dipende dall'engine, ma quando usi LIKE attivi il partial match
> > sulla stringa, che potrebbe bypassare gli indici e quindi
> > massacrarti le prestazioni.
> > 
> > Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per 
> > qualche mezz'ora ad ogni query.
> > 
> > Bye.  
> 
> Quello che sospettavo .
> ci saranno un migliaio di record al massimo; ma cercherò di scrivere
> qualcosa di esteticamente migliore e più funzionale
> 
> Grazie ancora
> Enrico
> 

In pratica, per fare un esempio, se ho  le relative opzioni
|provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc.

dovrò scrivere una query per ogni combinazione richiesta o sbaglio?

cosa mi son perso?

[toc] | [prev] | [next] | [standalone]


#22561

Fromlogica mente <npaolini_no_spam_@ennepisoft.it>
Date2019-02-14 16:57 +0100
Message-ID<q4434c$1p88$1@gioia.aioe.org>
In reply to#22560
Il 14/02/2019 16:23, Enrico Maria Chellini ha scritto:
> Il giorno Thu, 14 Feb 2019 12:00:55 +0100
> Enrico Maria Chellini <bitit@bitit.it> ha scritto:
> 
>>> Dipende dall'engine, ma quando usi LIKE attivi il partial match
>>> sulla stringa, che potrebbe bypassare gli indici e quindi
>>> massacrarti le prestazioni.
>>>
>>> Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per
>>> qualche mezz'ora ad ogni query.
>>>
>>> Bye.
>>
>> Quello che sospettavo .
>> ci saranno un migliaio di record al massimo; ma cercherò di scrivere
>> qualcosa di esteticamente migliore e più funzionale
>>
>> Grazie ancora
>> Enrico
>>
> 
> In pratica, per fare un esempio, se ho  le relative opzioni
> |provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc.
> 
> dovrò scrivere una query per ogni combinazione richiesta o sbaglio?
> 
> cosa mi son perso?
> 
> 

puoi scrivere qualcosa di simile ...
----------
$all = array(
	array('provincia', 'prov'),
	array('camere', 'camere'),
	);
$conc = '';
$q = ' WHERE ';
foreach($all as $item) {
	if(isset($_GET[$item[1]])) {
		$q .= $conc . $item[0]. '=' . $_GET[$item[1]];
		$conc = ' AND ';
		}
	}
if('' == $conc) {
	// nessun valore
	}
--------

[toc] | [prev] | [next] | [standalone]


#22563

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 16:11 +0000
Message-ID<gcli9oFd31aU1@mid.individual.net>
In reply to#22561
On 14/02/2019 15:57, logica mente wrote:

>          $q .= $conc . $item[0]. '=' . $_GET[$item[1]];

Occhio che questa è una SQL injection in attesa di esplodere. :)

Ma mi hai fatto notare un bug nel mio codice: se non ci sono condizioni 
la mia query fallisce. Bisogna attaccare la parte `where` solo se 
$wheres non è vuoto.

Bye.

[toc] | [prev] | [next] | [standalone]


#22569

Fromlogica mente <npaolini_no_spam_@ennepisoft.it>
Date2019-02-14 18:41 +0100
Message-ID<q4497c$mu2$1@gioia.aioe.org>
In reply to#22563
Il 14/02/2019 17:11, Alessandro Pellizzari ha scritto:
> On 14/02/2019 15:57, logica mente wrote:
> 
>>          $q .= $conc . $item[0]. '=' . $_GET[$item[1]];
> 
> Occhio che questa è una SQL injection in attesa di esplodere. :)
> 
> Ma mi hai fatto notare un bug nel mio codice: se non ci sono condizioni 
> la mia query fallisce. Bisogna attaccare la parte `where` solo se 
> $wheres non è vuoto.
> 
> Bye.
> 

Si, era giusto per una linea guida di come preparare la query per 
attaccare solo le variabili valorizzate

[toc] | [prev] | [next] | [standalone]


#22564

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 17:21 +0100
Message-ID<20190214172125.6d7243c6@nntp.aioe.org>
In reply to#22561
  
> 
> puoi scrivere qualcosa di simile ...
> ----------
> $all = array(
> 	array('provincia', 'prov'),
> 	array('camere', 'camere'),
> 	);
> $conc = '';
> $q = ' WHERE ';
> foreach($all as $item) {
> 	if(isset($_GET[$item[1]])) {
> 		$q .= $conc . $item[0]. '=' . $_GET[$item[1]];
> 		$conc = ' AND ';
> 		}
> 	}
> if('' == $conc) {
> 	// nessun valore
> 	}
> --------
> 


Capisco quello che hai scritto, ma come l'inserisco dentro una query con
pdo e prepare?

tipo questa :

$sformloc =  $ndb->prepare('SELECT * FROM  ( articoli INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
articoli.idArticoli=bookings_items.id_ref_external WHERE
online=:online  AND categoria=:categoria  GROUP BY
provincia,comune '); 
$sformloc->bindParam(':online', $online, PDO::PARAM_INT); 
$sformloc->bindParam(':categoria', $categoria,
PDO::PARAM_INT); $sformloc->execute();  


Hai qualche link dove possa studiarmi qualche esempio?

perchè il problema rimane prevenire sqlinjection.

Enrico

[toc] | [prev] | [next] | [standalone]


#22566

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 16:48 +0000
Message-ID<gclkf5Fdk1gU1@mid.individual.net>
In reply to#22564
On 14/02/2019 16:21, Enrico Maria Chellini wrote:

> $sformloc =  $ndb->prepare('SELECT * FROM  ( articoli INNER JOIN
> luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
> articoli.idArticoli=bookings_items.id_ref_external WHERE
> online=:online  AND categoria=:categoria  GROUP BY
> provincia,comune ');

La query è una stringa. La puoi costruire come ho detto io. Ti basta 
prendere questo pezzo:

WHERE online=:online  AND categoria=:categoria

e costruirlo come ho fatto io. Poi lo infili lì in mezzo. Il resto mi 
pare ti serva tutto.

Il codice che ho scritto è giusto al 99%. Ci sarà forse qualche syntax 
error o simile, ma dovrebbe quasi funzionare così com'è. :)

Se devi costruire query più complicate (tipo: devi selezionare le join o 
i group by in base ai parametri) diventa un problema.

> $sformloc->bindParam(':online', $online, PDO::PARAM_INT);
> $sformloc->bindParam(':categoria', $categoria,
> PDO::PARAM_INT); $sformloc->execute();

Puoi passare i binding a `->execute()` direttamente senza dover fare il 
`bindParam` uno per uno, come ho fatto io sopra.

> perchè il problema rimane prevenire sqlinjection.

Usando i placeholder di PDO sei già a posto da questo punto di vista.

Bye.

[toc] | [prev] | [next] | [standalone]


#22562

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 16:05 +0000
Message-ID<gclhusFd1r8U1@mid.individual.net>
In reply to#22560
On 14/02/2019 15:23, Enrico Maria Chellini wrote:

> In pratica, per fare un esempio, se ho  le relative opzioni
> |provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc.
> 
> dovrò scrivere una query per ogni combinazione richiesta o sbaglio?
> 
> cosa mi son perso?

Io costruisco le query dinamicamente. Esempio al volo senza test:

function search($prov, $loc, $cat, $camere, ...) {
   $wheres = [];

   if (!is_null($prov)) {
     $wheres['provincia'] = $prov;
   }
   if (!is_null($loc)) {
     $wheres['località'] = $loc;
   }
   ...

   $query = "select * from dati where ";
   $query .= implode(
     ' and ',
     array_map(
       function($k) { return $k . '= :' .$k; },
       $wheres
     )
   );

   $stmt = $this->pdo->prepare($query);
   $res = $stmt->execute($wheres);
   // o qualcosa del genere

   return $res;
}


Bye.

[toc] | [prev] | [next] | [standalone]


#22565

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 17:41 +0100
Message-ID<20190214174108.2abed106@nntp.aioe.org>
In reply to#22562
> Io costruisco le query dinamicamente. Esempio al volo senza test:
> 
> function search($prov, $loc, $cat, $camere, ...) {
>    $wheres = [];
> 
>    if (!is_null($prov)) {
>      $wheres['provincia'] = $prov;
>    }
>    if (!is_null($loc)) {
>      $wheres['località'] = $loc;
>    }
>    ...
> 
>    $query = "select * from dati where ";
>    $query .= implode(
>      ' and ',
>      array_map(
>        function($k) { return $k . '= :' .$k; },
>        $wheres
>      )
>    );
> 
>    $stmt = $this->pdo->prepare($query);
>    $res = $stmt->execute($wheres);
>    // o qualcosa del genere
> 
>    return $res;
> }
> 

Più chiaro .

ma hai pulito le variabili $prov,  $loc, $cat, $camere ... ?

altrimenti si potrebbe annidare li dentro un sqlinjection  o sbaglio?

Enrico 
 

[toc] | [prev] | [next] | [standalone]


#22567

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 17:08 +0000
Message-ID<gclljtFdrheU1@mid.individual.net>
In reply to#22565
On 14/02/2019 16:41, Enrico Maria Chellini wrote:

> ma hai pulito le variabili $prov,  $loc, $cat, $camere ... ?
> 
> altrimenti si potrebbe annidare li dentro un sqlinjection  o sbaglio?

No. I placeholder PDO servono proprio a quello: fanno l'escape 
automaticamente in base al motore SQL che hai sotto.

Bye.

[toc] | [prev] | [next] | [standalone]


#22568

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-14 18:25 +0100
Message-ID<20190214182513.6b05fdb3@nntp.aioe.org>
In reply to#22567
Il giorno Thu, 14 Feb 2019 17:08:13 +0000
Alessandro Pellizzari <shuriken@amiran.it> ha scritto:

> On 14/02/2019 16:41, Enrico Maria Chellini wrote:
> 
> > ma hai pulito le variabili $prov,  $loc, $cat, $camere ... ?
> > 
> > altrimenti si potrebbe annidare li dentro un sqlinjection  o
> > sbaglio?  
> 
> No. I placeholder PDO servono proprio a quello: fanno l'escape 
> automaticamente in base al motore SQL che hai sotto.
> 
> Bye.
> 

premesso che provo la soluzione che mi hai suggerito,  
""tanto per farmi fucilare ""
questa qui sotto sarebbe comunque a rischio sqlinjection o
sarebbe sicura?


----------
if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
{ $provincia=$_GET['provincia']; 

//per paranoia pulisco la stringa 
$provincia=trim($provincia); 
 $provincia=addslashes($provincia);
$provincia=htmlspecialchars($provincia);
 $provincia=substr($provincia, 0, 2);

//creo la condizione nel caso sia arrivata la richiesta della provincia
 $cond01=" AND provincia='".$provincia."'"; 
} 
//altrimenti la condizione non esiste
else { $provincia="";   $cond01="";  }

$sformloc =  $n2qdb->prepare('SELECT * FROM  ( articoli INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
articoli.idArticoli=bookings_items.id_ref_external WHERE online=:online  AND categoria=:categoria 
//inserisco la condizione nella query se esiste
'.$cond01.' 
GROUP BY provincia,comune ');
 $sformloc->bindParam(':online', $online, PDO::PARAM_INT);
 $sformloc->bindParam(':categoria', $categoria, PDO::PARAM_INT);
 $sformloc->execute(); 

------------------------------------
Funzionare funziona, ma non so quanto sia sicura.
Enrico

[toc] | [prev] | [next] | [standalone]


#22570

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2019-02-14 21:28 +0000
Message-ID<gcm4sqFh6tdU1@mid.individual.net>
In reply to#22568
On 14/02/2019 17:25, Enrico Maria Chellini wrote:

> if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
> { $provincia=$_GET['provincia']; 

Ok

> //per paranoia pulisco la stringa 
> $provincia=trim($provincia); 

Ok

>  $provincia=addslashes($provincia);
> $provincia=htmlspecialchars($provincia);

Questi due non servono.

>  $provincia=substr($provincia, 0, 2);

Ok

> //creo la condizione nel caso sia arrivata la richiesta della provincia
>  $cond01=" AND provincia='".$provincia."'"; 

Questo è a rischio SQL injection, anche se in realtà troncandolo rischi
poco.

Passa SEMPRE le variabili tramite parametri a PDO. Non concatenare mai
stringhe. Non fare mai specialchars, addslashes o roba del genere.

> $sformloc =  $n2qdb->prepare('SELECT * FROM  ( articoli INNER JOIN
> luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
> articoli.idArticoli=bookings_items.id_ref_external WHERE online=:online  AND categoria=:categoria 
> //inserisco la condizione nella query se esiste
> '.$cond01.' 
> GROUP BY provincia,comune ');
>  $sformloc->bindParam(':online', $online, PDO::PARAM_INT);
>  $sformloc->bindParam(':categoria', $categoria, PDO::PARAM_INT);
>  $sformloc->execute(); 

Bye.

[toc] | [prev] | [next] | [standalone]


#22571

FromEnrico Maria Chellini <bitit@bitit.it>
Date2019-02-15 11:01 +0100
Message-ID<20190215110119.6a1511c2@nntp.aioe.org>
In reply to#22570
> 
> >  $provincia=addslashes($provincia);
> > $provincia=htmlspecialchars($provincia);  
> 
> Questi due non servono.

in verità ho trovato in diversi toutorial addslashes ;
htmlspecialchars in questo caso non serve ma per campi di testo mi leva
tutti i vari % & $ è à etc.

riformulo per vedere se ho capito:
------------------------ 

///// creo l'array $wheres 
  $wheres[]=$categoria;
  $wheres[]=$online;

if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
  { $provincia=$_GET['provincia']; 

$provincia=trim($provincia);   $provincia=addslashes($provincia);
$provincia=htmlspecialchars($provincia); $provincia=substr($provincia,
0, 2);

/////creo la condizione
 $cond01=" AND provincia=?"; 

/////aggiungo la provincia a $wheres

 $wheres[]=$provincia;
 
  
} else { $provincia="";     $cond01="";     }


$sqll =  $ndb->prepare('SELECT * FROM ((articoli  INNER JOIN tipologie ON articoli.idTipologia=tipologie.idTipologia) INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo)   INNER JOIN bookings_items ON articoli.idArticoli=bookings_items.id_ref_external WHERE  categoria=?
AND online=? 

/////se presente aggiungo la condizione alla query

'.$cond01.' 

 ORDER BY occasione DESC, priorita ASC  LIMIT 
//// aggiungo i limiti che vengono dato dal sorgente,  non dovrebbero
creare falle, giusto?

 '.$pa.', '.$pb.''); 

//faccio eseguire l'array

$sqll->execute($wheres); 

$rqll = $sqll->fetchAll();

-----------------------

funzionare funziona ci sono falle?
Enrico 

[toc] | [prev] | [next] | [standalone]


Page 1 of 3  [1] 2 3  Next page →

Back to top | Article view | it.comp.www.php


csiph-web