mysql_real_escape_string, ben ik nou zo dom ?
voor het wegschrijven echo ik :
\'t Schrijvertje
In de database staat:
't Schrijvertje
Bij het uitlezen van de database krijg ik de melding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Schrijvertje'' at line 1
Wat doe/denk ik fout ?
Gewijzigd op 01/01/1970 01:00:00 door Patrick G
Edit: gebruik je wel $namecheck in de insert-query?
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Code (php)
1
2
3
2
3
$Qry_2 = "INSERT INTO school (naam, cat, pnt) VALUES ('$namecheck', 'C', '$score')";
$result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
echo $namecheck;
$result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
echo $namecheck;
waar moet ik dan die addslashes zetten ?
Quote:
Nee, nooit doen! De functie addslashes() heb je nooit nodig, mysql_real_escape_string() is voldoende.Nog eens apart addslashes() eroverheen laten gaan?
@patrick: het wegschrijven en uitlezen uit de database zijn twee verschillende dingen. Zo te zien gaat het wegschrijven prima en heb je een probleem met het uitlezen. Laat de query die je voor dat doeleinde gebruikt eens zien, wellicht dat we je dan verder kunnen helpen.
@Blanche; als ik mysql_real_escape_string() gebruik, zie ik wél backslashes in mijn database. Het gaat dáár dus fout.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Maar als ik een vervolgens:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$namecheck = mysql_real_escape_string($name[0]);
$Qry = "SELECT naam,cat FROM school WHERE cat = 'C' AND naam = '$namecheck' " ;
$resultaat = mysql_query($Qry) or die (mysql_error(heheheh));
$row = mysql_num_rows($resultaat);
if ($row == 0){
$Qry_2 = "INSERT INTO school (naam, cat, pnt) VALUES ('$namecheck', 'C', '$score')";
$result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
echo $namecheck;
}
else
{
$sql="UPDATE school SET pnt = $score WHERE naam = '".$namecheck."' AND cat = 'C' ";
echo $namecheck;
if(!mysql_query($sql)){
echo 'Er is een fout opgetreden: '.mysql_error();
}
}
$Qry = "SELECT naam,cat FROM school WHERE cat = 'C' AND naam = '$namecheck' " ;
$resultaat = mysql_query($Qry) or die (mysql_error(heheheh));
$row = mysql_num_rows($resultaat);
if ($row == 0){
$Qry_2 = "INSERT INTO school (naam, cat, pnt) VALUES ('$namecheck', 'C', '$score')";
$result_id_2 = mysql_query($Qry_2) or die(mysql_query($Qry_2));
echo $namecheck;
}
else
{
$sql="UPDATE school SET pnt = $score WHERE naam = '".$namecheck."' AND cat = 'C' ";
echo $namecheck;
if(!mysql_query($sql)){
echo 'Er is een fout opgetreden: '.mysql_error();
}
}
doe, dan schrijft hij wederom een record, terwijl er dus een record in de database staat.
@Djemo, als ik de variabelen uit de quote's haal krijg ik helemaal geen output
Waar komt $name[0] vandaan? Is dat een waarde die door een formulier verzonden is?
Edit:
Uiteraard alleen in het geval je gegevens uit een formulier komen zoals Jan zegt.
@Djemo die slashes horen niet in je database, probeer maar eens iets in te voegen via phpmyadmin.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
Ik lees een XML file uit, en die wordt vervolgens naar de database gegooid.
Gaat allemaal prima, zolang er geen school is met de naam 't Schrijvertje.
Kan het iets te maken hebben met de definitie van het veld in de database ?
Quote:
Nee, dan gaat het ergens anders fout. Hoogstwaarschijnlijk staat de magic_quotes_gpc instelling dan aan waardoor in jouw geval mysql_real_escape_string() ervoor zorgt dat de input dubbel geëscaped wordt...@Blanche; als ik mysql_real_escape_string() gebruik, zie ik wél backslashes in mijn database. Het gaat dáár dus fout.
@Patrick: echo de verschillende queries eens en kijk eens hoe die eruit zien. Dan wordt er waarschijnlijk heel wat duidelijk.
patrick schreef op 24.02.2008 20:10:
Ja, Jan,
Ik lees een XML file uit, en die wordt vervolgens naar de database gegooid.
Gaat allemaal prima, zolang er geen school is met de naam 't Schrijvertje.
Kan het iets te maken hebben met de definitie van het veld in de database ?
Ik lees een XML file uit, en die wordt vervolgens naar de database gegooid.
Gaat allemaal prima, zolang er geen school is met de naam 't Schrijvertje.
Kan het iets te maken hebben met de definitie van het veld in de database ?
Nee, wat de rest zegt; magic quotes staat waarschijnlijk aan. Maak een bestand met de naam .htaccess en zet dat in de root van je site. In het bestand zet je:
Dan ben je van het probleem af.
Helaas dat helpt niets.
Ik krijg nog steeds:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't Schrijvertje'' at line 1
Opvallend is de dubbele quote aan het eind.
uitzetten idd via .htaccess...
get_magic_quotes_gpc() bedoel je denk ik?
@Lode: en dat betekent ?
Ik begrijp dat ik TFM moet lezen, maar ik zoek me het schompes, heb inmiddels al zo'n 25 tutorials gelezen, maar tot nu toe zonder resultaat.
Behalve dat het eten aangebrand was dan :(
Gewijzigd op 01/01/1970 01:00:00 door patrick G
Dat betekent dus dat magic_quotes_gpc aan staat, iets dat niet echt gewenst is. Zet deze instelling dus uit in je php.ini of als je daar niet bij kan op de manier die Jan al beschrijft.
Maarr....
Als ik mysql_real_escape_string NIET gebruik,
Code (php)
1
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in D:\phpmap\xampp\htdocs\xampp\schaakmaat\schoolC.php on line 63
als ik het wel gebruik, zie als hierboven.
You have an error in ..........'t Schrijvertje'' at line 1
Dit gebeurt zowel op mijn lokale machine als bij mijn provider !!
Gewijzigd op 01/01/1970 01:00:00 door patrick G
Djemo schreef op 24.02.2008 19:29:
@Djemo: Er is je al meerdere keren verteld dat dit een hele domme fout is, hou dus s.v.p. op met dit foute advies, daarmee help je mensen van de wal in de sloot.Nog eens apart addslashes() eroverheen laten gaan?
Edit: gebruik je wel $namecheck in de insert-query?
Edit: gebruik je wel $namecheck in de insert-query?
Hoe doe je het wel?
magic_quotes zet je altijd uit en escapen doe je met bv. mysql_real_escape_string() of prepared statements.
Waarom? Omdat je dan nooit hardcoded slashes in je database krijgt die je er later weer uit moet slopen.
Ik heb het opgelost, moest bij het uitlezen van de database een select in een select doen, daarbij gebruikte ik de naam uit de eerste SELECT zonder mysql_real_escape_string voor de WHERE van de 2e select.
gewoon op de verkeerde plaats gekeken.
allemaal bedankt....