Beste PHP-ers, naar aanleiding van mijn opgestelde en uitgevoerde query, krijg ik de volgende foutmelding. Weten jullie wat er fout aan is?

You have an error in your SQL syntax near 'wel','wel','wel','wel','gesubsidieerde arbeid','wel','wel','wel','intake','begel' at line 1INSERT INTO enquete(ip, datum, vraag1, vraag2, vraag3, vraag4, vraag5,vraag6, vraag7, vraag8, vraag9, vraag10, vraag11, vraag12,vraag13, vraag14, vraag15, vraag16, vraag17, vraag18, vraag19,vraag20, vraag21, vraag22, vraag23, vraag24, vraag25, vraag26,vraag27, vraag28, vraag29, vraag30, vraag31) VALUES ('127.0.0.1','16:06:2007 12:30:54','man','27-35','WW','Lager Onderwijs','december 2006','niet','wel','wel','wel','wel','wel','wel','wel','wel','wel','wel','wel','wel','wel,'wel','wel','wel','wel','gesubsidieerde arbeid','wel','wel','wel','intake','begeleiding','wel','1')

Dit is de code:

$sql="INSERT INTO enquete";
$sql.="(ip, datum, vraag1, vraag2, vraag3, vraag4, vraag5,";
$sql.="vraag6, vraag7, vraag8, vraag9, vraag10, vraag11, vraag12,";
$sql.="vraag13, vraag14, vraag15, vraag16, vraag17, vraag18, vraag19,";
$sql.="vraag20, vraag21, vraag22, vraag23, vraag24, vraag25, vraag26,";
$sql.="vraag27, vraag28, vraag29, vraag30, vraag31)";
$sql.=" VALUES ";
$sql.="('$ip','$datum','$vraag1','$vraag2','$vraag3','$vraag4','$vraag5',";
$sql.="'$vraag6','$vraag7','$vraag8','$vraag9','$vraag10','$vraag11','$vraag12',";
$sql.="'$vraag13','$vraag14','$vraag15','$vraag16','$vraag17','$vraag18','$vraag19,";
$sql.="'$vraag20','$vraag21','$vraag22','$vraag23','$vraag24','$vraag25','$vraag26',";
$sql.="'$vraag27','$vraag28','$vraag29','$vraag30','$vraag31')";


$connection=mysql_connect("localhost","root","");
$database=mysql_select_db("enquete", $connection);

mysql_query($sql);
echo mysql_error();
echo $sql;
Nogmaals, ga normaliseren! Je komt nu al in de problemen en gezien bovenstaande data zie ik al veel meer problemen opduiken. Het is bv. vrijwel onmogelijk een patronen in de data te ontdekken wanneer je bv. een 1000 records in de database hebt staan. Oorzaak: genummerde kolomnamen...

Verder zijn de datatypes niet goed, dat gaat ook nog een berg problemen opleveren. Zie de handleiding.

DATE of DATETIME voor een datum en 'wel' zal waarschijnlijk als een boolean moeten worden opgeslagen en dus gewoon TRUE of FALSE gebruiken.
Beste Frank,

Ik wil best normaliseren maar zou niet weten hoe ik dat in dit geval moet doen.Voor datum heb ik al DATETIME als datatype, voor id INT en de rest VARCHAR. Maat idd, ik ben geen specialist in databases.

Het enige wat ik beoog te doen, als dit werkt, is kijken hoeveel x er bijvoorbeeld wel op een bepaalde vraag is geantwoord. Meer niet.

Groet,
Frank
Je hebt voor $vraag19 een ' staan en daarna niet dus maak er dit van:
'$vraag'
Zoals jij wilt!

Noteer de queries voortaan wel netter, dan is de fout zo gevonden:
'wel',
'wel,
'wel',

bij de 2e wel ontbreekt een quote.

Nogmaals, het lijkt mij een waarde die als boolean moet worden opgeslagen (wel/niet), dan krijg je gewoon een TRUE of FALSE zonder quotes. Dan heb je dit probleem ook niet meer.

<?
$sql="INSERT INTO enquete";
$sql.="(ip, datum, vraag1)";
$sql.=" VALUES ";
$sql.="('$ip','$datum','$vraag1')";

// is hetzelfde als
$sql="
INSERT INTO
enquete(
ip,
datum,
vraag1
)
VALUES(
'$ip',
'$datum',
'$vraag1'
)
";
?>
Nu open en sluit je de string slechts 1x en niet tientallen keren. De query wordt zo een stuk beter leesbaar en is dus eenvoudiger te debuggen.
Bedankt RemBem, zat me helemaal suf te staren maar zag het niet. Eindelijk werkt het. Zal ik nu eens gaan kijken hoe ik een en ander kan normaliseren.

prettig weekend

Frank

Reageren