Modificare record

da programmatore:


visto che non è la prima volta vorrei specificare quanto trovato in diversi manuali [...]
prima volta di fare una query d'inserimento? Che c'entra?
Tutti i valori devono essere indicati fra due apici che possono essere omessi solo nel caso di valori numerici.

attenzione: dice "possono" non "devono"
A parte che non so che guide siano e a che dbms facciano riferimento, ad ogni modo i valori numerici NON andrebbero indicati fra virgolette se il campo nel db è numerico. Poi, che spesso i dbms effettuino una conversione dei tipi al volo, questo è un altro paio di maniche. Spesso non è sempre: ti assicuro che in molti dbms se metti le virgolette e non servono (come nel tuo caso) ottieni un errore.
Quindi io preferirei la dicitura su quei manuali di questo tipo:
"Tutti i valori non numerici devono essere indicati fra due apici che, a seconda del dbms utilizzato, possono essere mantenuti anche nel caso di valori numerici."
satifal ha ragione ("dimenticanza")
Vero.
 
prima volta di fare una query d'inserimento?
no, che viene trattato il problema degli apici

...che, a seconda del dbms utilizzato, possono...

io sto parlando, e nel post si parla, di MySQL Database Version 5.0.45 può darsi che altri non vogliano gli apici


p.s.
uno dei manuali è "guida php/msql" di f. bonetto trovato (mi spiace) sulla concorrenza
 
ad ogni modo i valori numerici NON andrebbero indicati fra virgolette se il campo nel db è numerico. Poi, che spesso i dbms effettuino una conversione dei tipi al volo, questo è un altro paio di maniche. Spesso non è sempre: ti assicuro che in molti dbms se metti le virgolette e non servono (come nel tuo caso) ottieni un errore.
Quindi io preferirei la dicitura su quei manuali di questo tipo:
"Tutti i valori non numerici devono essere indicati fra due apici che, a seconda del dbms utilizzato, possono essere mantenuti anche nel caso di valori numerici."

Appoggio in pieno, troppo spesso ci sono in giro guide, anche su siti eccellenti, che pur non dando informazioni completamente errate non specificano bene come stanno le cose e danno adito a queste convinzioni.
E non mi sono mai piaciuti neanche questi "casting" volanti che permettono la persistenza di queste...
 
Tanto per ufficializzare un po' la cosa:

Stringhe e Numeri

8.1.1. Strings

A string is a sequence of bytes or characters, enclosed within either single quote (“'”) or double quote (“"”)

8.1.2. Numbers

Integers are represented as a sequence of digits. Floats use “.” as a decimal separator. Either type of number may be preceded by “-” or “+” to indicate a negative or positive value, respectively
 
no, che viene trattato il problema degli apici
Ah, ok, scusa. Non aveva infatti senso la mia interpretazione :)

p.s.
uno dei manuali è [...]
I manuali possono essere sbagliati (perché sono scritti da esseri umani che non hanno il dono dell'infallibilità). Non faccio neanche una ricerca in internet: chiunque sia l'autore e qualunque sia il manuale ciò che hai riportato, secondo me, non è universalmente applicabile e a mio avviso è fuorviante. Questa ovviamente è un'opinione personale e non è obbligatorio condividerla.

Di sicuro quello delle virgolette è un particolare che si può fare benissimo a meno di conoscere (sarcasmo). Poi si può sempre dire "quando ogni query dà errore per gli apici si risolve caso per caso" (pratica di programmazione molto usata e che non pratico e non condivido assolutamente).
Finché lavori con mysql con quella versione non sarà un problema, per chi lavora con dbms diversi, ognuno con le proprie regole, è meglio sapere _veramente_ come funzionano le cose :D
 
ciao, prova questo stupido script e guarda di che tipo risulta la variabile, anche inserendo esclusivamente un numero, che poi andrò a mettere in una query per l'id di tipo "numerico"

PHP:
<?php
if(isset($_POST['Submit'])){
	$id=$_POST['numero'];
	var_dump($_POST['numero']);
	echo "<br>";
	var_dump($id);
	$id = (int) $id;
	echo "<br>";
	var_dump($id);
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" name="form1">
  <p>inserisci un numero 
    <input name="numero" type="text" id="numero" size="1" maxlength="1">
</p>
  <p>
    <input type="submit" name="Submit" value="Invia">
</p>
</form>

il "casting" qualcuno deve farlo, o prima o poi


p.s.


8.1.1. Strings
..............................

8.1.2. Numbers
..............................

non credi che sia ad un livello uno poco elementare?
 
ciao, prova questo stupido script e guarda
Ti rispondo io... non so se dicevi a me, purtroppo non specifichi.
Premetto che non ho provato lo 'stupido script' per il semplice motivo che è fuori tema per almeno 3 motivi:
- si stava parlando di query, quindi il php non c'entra
- anche se c'entrasse, non tirerei fuori il php come esempio di linguaggio (fortemente) tipizzato
- inoltre, tutti i valori ritornati dal vettore $_Post sono stringhe (dovresti tra l'altro usare $HTTP_POST_VARS e smettere di usare $_POST)
[/QUOTE]

il "casting" qualcuno deve farlo, o prima o poi
Magari per andare in tv ;) Preferisco chiamarlo 'cast' :D (è una battuta eh!) Comunque di sicuro non lo fa il php ma il dbms (se è fra quelli che non te lo segnala come errore).
p.s.
non credi che sia ad un livello uno poco elementare?
Forse, ma almeno sarebbe corretto e si riferirebbe solo ad uno specifico dbms.
 
ciao
eventualmente apriamo un nuovo 3d se no andiamo OT
purtroppo non specifichi
dicevo a trogo

si stava parlando di query, quindi il php non c'entra

$query=mysql_query("SELECT..... WHERE id=$id");
$id è tipo stringa

non tirerei fuori il php come esempio di linguaggio
stiamo parlando di php non di relatività ristretta o generale, in più php collegato con mysql

hai provato a digitare $HTTP_POST_VARS su http://it2.php.net/manual/en/index.php ?

....solo ad uno specifico dbms...

dicevo elementare perchè sono cose risapute dal tempo del vecchio (e in certo senso rimpianto) basic

'cast' (è una battuta eh!)
;) si, mi fa venire in mente grande fratello e similaria
 
stiamo parlando di php non di relatività ristretta o generale, in più php collegato con mysql
Per il php puoi anche scrivere
$r=mysql_query("ciao");
tanto non è lui a interpretare la query, quindi il fatto che $id è stringa o meno non cambia niente. Nel tuo caso il dbms penserà che si tratti di un numero (dato che non ci sono virgolette e rispecchia le regole di rappresentazione di un numero) e sì lamenterà se invece si trova a leggere un non numerico (perché mancano le virgolette). E' questo il punto sul quale non ci capiamo: dove finisce la giurisdizione del php e dove inizia quella del mysql. Non fa niente. :)
hai provato a digitare $HTTP_POST_VARS su http://it2.php.net/manual/en/index.php ?
No, di solito non cerco cose che conosco già. Comunque seguendo la tua ipotesi e il tuo ragionamento, sarebbe stato più logico cercare $_POST. Nel tuo caso invece è logico aspettarsi la ricerca di $HTTP_POST_VARS. :)
dicevo elementare perchè sono cose risapute dal tempo del vecchio (e in certo senso rimpianto) basic
Avevo inteso 'elementare' nel senso 'non complicato'.
Comunque il basic è ancora vivo! Continua solo a reincarnarsi in versioni più aggiornate ;)
;) si, mi fa venire in mente grande fratello e similaria
Infatti! :)
 
Tanto per concludere (spero) e tirare le somme sennò facciamo aprire una sezione del forum a parte :D

Il nocciolo della questione è:

1) In una query su MySQL, dovendo utilizzare un valore numerico in questa, il valore numerico deve essere messo tra apici?
- No, non deve essere messo tra apici.

2) In una query su MySQL, dovendo utilizzare un valore numerico in questa, il valore numerico può essere messo tra apici?
- Si, può essere messo tra apici.

E credo che su questi due punti siamo tutti d'accordo.

3) E' buona norma usare gli apici per contornare dei valori numeri in query MySQL?
- No, sarebbe meglio evitarlo
1) Per chiarezza nel codice dello script o programma che sia. Se
nel sorgente vedo un numero contornato da apici sono portato a
pensare che il corrispettivo campo nella tabella MySQL sia di tipo
stringa, cosa che potrebbe essere non vera.
2) In questo momento MySQL accetta questa sintassi, ma non è
detto che duri per sempre. In PHP 4 la funzione array_merge
accettava parametri di tipo diverso da array, in PHP 5 non è più
così ed il typecasting deve essere esplicitato.

Così può andare bene per mettere tutti d'accordo?:hammer:
 

Discussioni simili