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


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

PDO e virgolette

Started byNoS <NoS@nospam.no>
First post2017-03-01 19:36 +0100
Last post2017-03-02 11:01 +0100
Articles 6 — 3 participants

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


Contents

  PDO e virgolette NoS <NoS@nospam.no> - 2017-03-01 19:36 +0100
    Re: PDO e virgolette fmassei@gmail.com - 2017-03-01 10:50 -0800
      Re: PDO e virgolette NoS <NoS@nospam.no> - 2017-03-01 19:53 +0100
        Re: PDO e virgolette fmassei@gmail.com - 2017-03-01 11:08 -0800
    Re: PDO e virgolette Alessandro Pellizzari <shuriken@amiran.it> - 2017-03-01 20:47 +0000
      Re: PDO e virgolette NoS <NoS@nospam.no> - 2017-03-02 11:01 +0100

#21465 — PDO e virgolette

FromNoS <NoS@nospam.no>
Date2017-03-01 19:36 +0100
SubjectPDO e virgolette
Message-ID<o974c9$167h$1@gioia.aioe.org>
Salve a tutti,
ho un problema con PDO.

Praticamente le virgolette " inserite in un stringa, che dovrebbe essere 
memorizzata nel db, spezzano la stringa stessa.

I dati sono passati in questo modo:

$data = array(
'nome' => $nome,
'cognome' => $cognome,
'nickname' => $nickname

);
$query = 'UPDATE user
SET
firstname = :nome,
familyname = :cognome,
WHERE nickname= :nickname';
$sth = $this->pdo->prepare($query);
$sth->execute($data);

Ho letto in giro, qualcuno suggerisce QUOTE ma il manuale lo sconsiglia 
a favore di PREPARE.

Il charset è definito tra i parametri di connessione come:
define('CHARSET', 'utf8');

Ho anche provato a modificarlo in utf8mb4 ma il risultato non cambia.

Come posso risolvere?
Grazie in anticipo

[toc] | [next] | [standalone]


#21468

Fromfmassei@gmail.com
Date2017-03-01 10:50 -0800
Message-ID<ad82a0ed-06b3-404f-9e66-c5e82615816f@googlegroups.com>
In reply to#21465
On Wednesday, March 1, 2017 at 1:37:00 PM UTC-5, NoS wrote:
> ...
> Come posso risolvere?
>

A me sembra a posto: hai stringhe "spezzate" nel DB? Hai controllato prima della
query (nell'array) e dopo (nella tabella) se è tutto come ti aspetti?

Ciao!

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


#21469

FromNoS <NoS@nospam.no>
Date2017-03-01 19:53 +0100
Message-ID<o975as$17p7$1@gioia.aioe.org>
In reply to#21468
Ciao,
guarda stavo per scrivere che in effetti la soluzione è in lettura e non 
in scrittura.
Mi sono accorto che la stringa è memorizzata bene ma in lettura non era 
trattata.

Ora ho risolto mettendo un htmlspecialchars($datoRisultanteDallaSelect);

Domanda: trami PDO, c'è un modo per trattare i dati letti direttamente 
dall'oggetto di PDO? (ora come ora applico htmlspecialchars ai dati 
mentre li stampo a video, volevo sapere se potevo "pulirli" direttamente 
da qualche metodo PDO in fase di select).

Grazie cmq per la risposta.

Il 01/03/2017 19.50, fmassei@gmail.com ha scritto:
> On Wednesday, March 1, 2017 at 1:37:00 PM UTC-5, NoS wrote:
>> ...
>> Come posso risolvere?
>>
>
> A me sembra a posto: hai stringhe "spezzate" nel DB? Hai controllato prima della
> query (nell'array) e dopo (nella tabella) se è tutto come ti aspetti?
>
> Ciao!
>

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


#21471

Fromfmassei@gmail.com
Date2017-03-01 11:08 -0800
Message-ID<70cb0175-d6b3-42fe-9cf4-6d582f96d547@googlegroups.com>
In reply to#21469
On Wednesday, March 1, 2017 at 1:53:19 PM UTC-5, NoS wrote:
> Ora ho risolto mettendo un htmlspecialchars($datoRisultanteDallaSelect);
> 
> Domanda: trami PDO, c'è un modo per trattare i dati letti direttamente 
> dall'oggetto di PDO? (ora come ora applico htmlspecialchars ai dati 
> mentre li stampo a video, volevo sapere se potevo "pulirli" direttamente 
> da qualche metodo PDO in fase di select).
> 

Non mi pare, anche perché non è il lavoro di PDO :) Puoi fare varie altre cose
che magari ti "puliscono" un po' il codice, tipo la fetch in una classe (e poi
usare dei metodi appositi della classe stessa) o magari una semplice array_map.

Io personalmente non faccio nulla: nelle View, se ho bisogno di stampare una
stringa, scrivo esplicitamente htmlspecialchars (e/o simili) perché lo trovo
più chiaro da leggere. YMMV.

Ciao!

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


#21472

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2017-03-01 20:47 +0000
Message-ID<ehoqb6Fnop8U1@mid.individual.net>
In reply to#21465
On 01/03/17 18:36, NoS wrote:

> Il charset è definito tra i parametri di connessione come:
> define('CHARSET', 'utf8');

Questo definisce una costante generica, non passa parametri al DB.

Sei sicuro che poi questa costante venga usata?

Bye.

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


#21476

FromNoS <NoS@nospam.no>
Date2017-03-02 11:01 +0100
Message-ID<o98qh4$1r1j$1@gioia.aioe.org>
In reply to#21472
Hai ragione, ho messo la definizione della variabile ma per la fretta ho 
dimenticato il resto la funzione di connessione....

Questo è il codice completo che credo sia corretto.

define('HOST', $db_host); // Database host name eg. localhost
define('USER', $db_user); // Database user. eg. root ( if your on local 
server)
define('PASSWORD', $db_password); // Database user password  (if 
password is not set for your root user then keep it empty )
define('DATABASE', $db_name); // Database name
define('CHARSET', 'utf8');


function DB()
{
     try {
         static $instance;
         if ($instance === null) {
             $opt = array(
                 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                 PDO::ATTR_EMULATE_PREPARES => FALSE,
             );
             $dsn = 'mysql:host=' . HOST . ';dbname=' . DATABASE . 
';charset=' . CHARSET;
             $instance = new PDO($dsn, USER, PASSWORD, $opt);
         }
         return $instance;
     } catch (PDOException $e) {
         return "Error!: " . $e->getMessage();
     }
}



Il 01/03/2017 21.47, Alessandro Pellizzari ha scritto:
> On 01/03/17 18:36, NoS wrote:
>
>> Il charset è definito tra i parametri di connessione come:
>> define('CHARSET', 'utf8');
>
> Questo definisce una costante generica, non passa parametri al DB.
>
> Sei sicuro che poi questa costante venga usata?
>
> Bye.
>
>

[toc] | [prev] | [standalone]


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


csiph-web