Newsgroup: it.comp.www.php
Titolo: Problema con caratteri particolari utilizzati nell'intestazione campi MySql

Vorrei utilizzare caratteri particolari (come "#", "&", etc.)
all'interno dei nomi dei campi di una tabella MySql ma il programma
PHP che vi accede da errore.
Il tutto funziona perfettamente se sostituisco il carattere
particolare con uno standard.
Posso risolvere in qualche modo? Esiste una funzione PHP che risolve
il problema?
Grazie
Alberto

Alberto wrote:

http://php.net/mysql_real_escape_string
-- 
www.iuz-lab.info
 - 
www.php-faq.org

 con uno standard.
Non puoi.
MySQL accetta solo alfanumerici, underscore e "dollaro" nei nomi.
Bye.

iuz wrote:

no lascia stare.. avevo letto male il tuo post.. segui il suggerimento di
Alessandro Pellizzari..
-- 
www.iuz-lab.info
 - 
www.php-faq.org

PHP che vi accede da errore.
Vedo i sintomi di un problema mal posto :-)
Descrivi il problema, poi vediamo se usare una colonna chiamata
"Baldini&Castoldi" e' davvero il modo migliore di risolverlo.
Comunque, se **proprio** devi, la soluzione e' semplice: usi al
posto del nome il Base64_Encode del nome, e lo decodifichi solo
al momento di leggerlo.
<?php
	function php_dcdfcstczz($nome)
	{
		return 'name:' . base64_decode(
			str_replace(array('_'),array('='),$nome));
	}
	function php_cdfcstczz($nome)
	{
		return str_replace(array('='),array('_',
			base64_encode($nome));
	}
	function my_SQLExec($query)
	{
		// Trasforma una query come
		// SELECT name:Baldini&Castoldi FROM...
		// in
		// SELECT QmFsZGluaSZDYXN0b2xkaQo_  FROM...
		$query = preg_replace('/name:(\S)+/e',
"php_cdfcstczz('\1')", $query);
		return SQLExec($query);
	}
	function my_SQLFetchTuple($exec)
	{
		$newobj = array();
		$result	= SQLFetchTuple($exec);
		foreach($result as $key => $value)
			$newobj[php_dcdfcstczz($key)] = $value;
		return $newobj;
	}
?>
A questo punto ti funziona:
	my_SQLExec("CREATE TABLE name:73+17(buffo!) ( name:Gianni&Pinotto
integer;");
	my_SQLExec("INSERT INTO name:73+17(buffo!) ( name:Gianni&Pinotto )
VALUES(42);");
	my_SQLExec("SELECT * FROM name:73+17(buffo!);");
	ti ritorna
		name:Gianni&Pinotto = 42
Chiaramente, l'efficienza e' un'altra cosa.
Se gia' hai un elenco dei campi che vuoi, ti conviene usare una tabella di
transcodifica:
	'fld1'	=> 'Baldini&Castoldi',
	'fld2'	=> 'Ambarabà, Ciccì & Coccò',
	'fld3'	=> 'Tabella #3, cfr. §7.2 p. 17',
...cosi' MySQL usa dei normali fld1, fld2 e cosi' via.
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?



Il motivo è che sto faceno una libreria di gestione DB mysql ed ho
previsto che, per un campo tipo "auto#modelli" la scelta delle auto da
inserire venga fatta con una select dalla tabella "modelli", e questo
valga, in modo automatico, per qualsiasi campo generico. Il carattere
particolare, ad es. "#" è quello che fa capire al programma che si
tratta di un caso del genere.
Grazie del suggerimento.
Alberto

tratta di un caso del genere.
Ahhh, in questo caso ti conviene fare in un modo... del tutto diverso.
Devi nascondere all'utente della libreria il nome del campo (potresti pure
generarlo a caso), e immagazzinare degli attributi extra per il campo, per
esempio in un file .INI:
[auto]
; Modello automezzo
name		= "auto"
type		= select-one
class		= autoselectbox
sourcetype	= table
sourcedb	=
sourceuser	= 
sourcepassword	= 
sourceexpression= "SELECT * FROM modelli WHERE idmarca=[idmarca];"
In questo modo complichi un po' la gestione, ma il sistema e' *molto* piu'
potente. Potresti perfino avere un "template" HTML dentro cui scrivi
	{{{auto}}}
e la engine ci mette dentro la select box con la classe CSS opportuna :-)
Leonardo BTDTGTTS


  What do you weave with wool so white?
Mi sembra un metodo utilizzabile in molti contesti generali.
Grazie dell'idea.
Alberto