Newsgroup: it.comp.www.php
Titolo: errore per campo con apostrofo​

questo scritte provvede a trasferire dei campi da un database a un 
altro,  solo che mi dà errore quando il campo testo annuncio contiene 
un carattere speciale tipo apostrofo,  in questo caso sul video compare 
il seguente messaggio:
 
netYou have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near 'presse su turni per 6 giorni lavorativi. ', 'OPERAIO STAMPAGGIO 
PLASTICA TURNIS' at line 1
 
 se elimino l'apostrofo dal campo testo annuncio tutto funziona 
correttamente.
 
 come devo fare per risolvere questo problema,  allego lo script
 
 
<?
include("area_riservata.php"); 
set_time_limit(900);
include("config.inc.php");
$datacanc = $_POST['datacanc'];
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file 
config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri 
nel file config.inc.php");
$query = "SELECT id,zona,testoannuncio,titolo,data,email,tipo,visite  
FROM lavqual3 WHERE bollettino = 'ATTIVATO' AND data LIKE '%$datacanc%' 
AND tipo = 'offerta' AND visite>50 ";
$result = mysql_query($query, $db); 
if (false === $result) {
die(mysql_error());
}
while ($row = mysql_fetch_array($result))
{ 
print "DATA ANNUNCIO ";
print $row[data];
print " - NUMERO ANNUNCIO ";
print $row[id];
print " - ".$row[email];
print " - ".$row[tipo];
print " - VISITE ".$row[visite];
print ("  <BR>\n\n");
print $row[testoannuncio];
print ("  <BR>\n\n");
print ("  <BR>\n\n");
 
$Email=$row[email];
print"E-MAIL CLIENTE";
print $Email;
 
$testoannuncio = $row[testoannuncio];
$titolo = $row[titolo];
$zona = $row[zona];
$tipo = $row[tipo];
 
# INSERIMENTO
###############################################################
 
# CALCOLO DATA 
$data=date("d/m/y");
 
$query = "INSERT INTO lavqualDL (cognome , indirizzo , cap , citta , 
provincia , telefono , email , testoannuncio , titolo , data , zona , 
bollettino , tipo ) VALUES 
('$cognome', '$indirizzo', '$cap', '$citta', '$provincia', '$telefono', 
'$email', '$testoannuncio', '$titolo', '$data', '$zona', '$bollettino', 
'$tipo')";
$result2 = mysql_query($query, $db); 
if (false === $result2) {
die(mysql_error());
}
 
}
mysql_close($db); 
 
?>
 
 
 

 il seguente messaggio:
 
Se ne è parlato diverse volte negli ultimi mesi.
 
In breve: Usa PDO e le prepared statement. mysql_query e simili sono 
deprecate.
 
In un po' meno breve: cerca negli archivi del newsgroup la stringa "Usa 
PDO". :P
 
 
Bye.
 

 ha scritto:

 io non voglio usare PDO  in quanto dovrei modificare tutti gli script ed 
è un lavoraccio,  non esiste una soluzione più semplice per risolvere 
questo problema​
 
 

 questo problema​
 
Usare mysql_real_escape_string() su ogni stringa, passandosi tutti gli 
script per aggiungerlo, poi pianificare di passarsi comunque tutti gli 
script a PDO, visto che stai usando funzioni deprecate.
 
Se ti aspetti la bacchetta magica, l'hanno tolta da una certa versione di 
PHP in poi. E non ti dirò quale era, per evitare che tu faccia il 
downgrade di PHP solo per poterla usare. :P
 
Bye.