Underlig MySQL fejl.
Hej Eksperter.
Jeg får denne fejl fra mysql, når jeg prøver at lægge noget ind.
Fejl
Det er muligt at du har fundet en fejl i SQL-parseren. Undersøg venligst din forespørgsel nøje, og check at anførselstegn er rigtige og ikke giver konflikter. Andre fejlårsager kan være at du uploader en fil med binær udenfor et lukket tekstområde. Du kan også prøve din forespørgsel i MySQL kommandolinie-interfacet. MySQL-serverens fejlmelding der følger herunder, hvis der er nogen, kan også hjælpe dig med at finde problemet. HVis du stadig har probemer eller hvis parseren fejler hvor kommandolinieinterfacet lykkes, reducer din SQL-forespørgselsinput til den ene forespørgsel der forårsager problemet, og indsend en fejlrapport med datablokken i KLIP sektionen herunder:
----BEGYND KLIP----
eNptVc1y2zYQvvMp9pCZTGcohqKkxFanM3VtNbbjH0VykqMGDJcURBBkAZCNXrBvIj+Dj90FKSuH
HCwZ+/Ptt98uoMVq9biaw+UYLhO4WzzMIUkS+pvAeHZ+HqyfyPkSBJdf13N4c5PNwf6jGmEsmkjJ
NGq2TdhBEr2PkmgKSRxP38WTd/EMxmfzWTKfTUFhdQ6LHw28Ce736893c5hGcZSMR6ougi/rFTyu
Q7j4uHh4CuHrgqp9kxpuFvA+ioPl/QXxiWbRh1GjxsHyeskh4eOaQSbRGdxJ3f4I7i4ePs4hEyNp
69HZ2ex8NA58pS/Lq4unBdhu0xJhC+vFE3xvjDbwB7yNZ+PxWTyeTmZvIYS8Nlp0mh2fjLROCg1/
iZJdmDt8dd6itqjZLDKD1qLPUKIsMd2hKWAWs7OprdNmk+7ZnXyYxQSmFJq2Ya9DhXnt8SZxMmU/
m6s6lcpT82Ur0Z/+xbQSljj8KZRIpYsyT6t8MVjWxnHIA+7YNKQPJ2FS3GXUSsbGa1T0H9t3dbqx
0rXCyZ7DHWayOHpetC19U39TTbitU3aoF73J+Uz2MU05jo/WTpbCSOE9bDMHwtpidjyLUgwi3Qpf
QmxOputPISxNbUUIa1GNroTzMXVjZYGqj/Gg+wLNCcM6I/IchXPYU+rNaWtQtH3gIAFV+9nqo7B6
NqWWeoC8xh2sWo0hZEiAQFZ7ANTA4H4vgLrLWihpI4gSH9BBJ03JoXXlj7YUiogX/rAVHqMu6KN7
NhxNglBiITuESha0kSw5gq5JCUOTp3o/oerWYzH+XhMPyEXppC19DFlXtMeEnWPmhtye3q4GxbCG
uyOyGg3CtpOWA9Sed4g0wQKKgwFZCF1QtmdWN8Z3n5qWdcloEqkggCMVJTo2s2GPUJD+sgRH60a3
mO5rqUXToPahRMxr5Bk9a7olIOlIl8XDMgXkqzAQQ/Ab51VOFQtkFVNxkBsBtKfoIgiC9dAMMSDy
fRdU6dREJllCBSLvk2j1lGMuWUUeKzOmt+1onKdZUnGaL1VXXra+eXydI57GSFiULDJOZvFU3XH7
EcyXRO7+wHfmKDSl5UrqMuRsJah1z5YGzvR5xTR8r6uG2uTvirrEhuryouTSd/CqP2NkRJbE0QfT
rxrPsaIlq6BoSSgzDKckKPqqG6bPj4Ovz50Sp1T04jn+VEj8zVHi06wpT1YNewxrQ7r//ht1dzXs
d79bfDVt2I9YvyYTHd3zCPvYdF9QHLNZrv67vFk/+asiNeld+YeHnlQCc7yIHsm/dsQ0P/D+H4Ud
7gV30UmeAj1mVvNrC3UVsq0/Waj8DPqdHzaMjQy5JV4sOs+ab2FNYxQFd8cPwrfrxWrxy5+F/wE+
HFVT
----SLUT KLIP----
----BEGYND RÅ----
ERROR: C1 C2 LEN: 222 223 1599
STR: ø
CVS: $Id: sqlparser.lib.php,v 2.6.2.4 2004/03/05 18:52:54 lem9 Exp $
MySQL: 4.0.21-log
USR OS, AGENT, VER: Win IE 6.0
PMA: 2.5.7-pl1
PHP VER,OS: 4.3.8 Linux
LANG: da-iso-8859-1
SQL: UPDATE sv_users SET cprnr = 'skjult' , fornavn = 'Kristian Bak' , efternavn = 'Jensen' , adresse = 'skjult' , postnr_by = '2750 Ballerup' , telefon = 'skjult' , mobil = '0' , email = 'skjult' , kørekort = 'Nej' , bil = 'Nej' , arbejdstid = 'Heltid' , job_situation = 'Ledig' , job_ønske = 'Fast Job' , løn_fast = '120000' , løn_vikariat = '' , rådighed = '' , akasse = 'Ja' , ja_akasse = 'HK, Prosa, Sam-Data' , opsigelse = '' , ryger = 'Ja' , straffeattest = 'Ja' , bureauer = 'Nej' , ja_bureauer = '' , bemærkninger = 'Hej skjult, dette er så en test, for at du kan se at det virker som det skal, og det har så også været ved at give mig svedige nosser, men det virker nu, og er syntes faktisk det er RET så fedt, men du kan jo lige ringe senere hvis du lyster, jeg går igang med at oprette bruger databasen nu, og laver den nye grafik til login knappen, og så at de kan ændre i deres dataer, eller hvis de ønsker at blive slettet fra sitet.
Senere hen går, jeg så igang med din del af sitet, altså admin siden, hvor du kan se de forskellige brugere, og det er så også alt hvad du går lov til. :P
Måske hvis du er flink, så lader jeg dig hente en complet comma sepereret fil af databasen, sådan at når det system ham gutter laver kommer op og køre, så kan du bare hente hele lortet fra databasen og importere det. ;)
Det skal lige siges, at den database han laver, skal bygges op PRÆCIST som informationerne står i den mail du får nu. :P
Men det kan vi altid snakke om, vi snakkes måske senere, ellers må du have en forsat god dag. ;)' , WHERE cprnr = 'skjult'
----SLUT RÅ----
koden ser sådan her ud:
<?php
include("admin/inc/config.inc.php");
mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());
$q = mysql_query("SELECT * FROM sv_users LIMIT 1");
$felt = array();
for($i = 0; $i < mysql_num_fields($q); $i++) {
$felt[] = mysql_field_name($q ,$i);
}
$sql = "UPDATE sv_users SET ";
for($i = 0; $i < count($felt); $i++) {
if($felt[$i] != "id" AND $felt[$i] != "created") {
$sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
if($i != (count($felt)-1)) {
$sql .= ", ";
}
}
}
$sql .= " WHERE cprnr = '".$_POST['cprnr']."'";
//mysql_query($sql) or die(mysql_error());
include("inc/header.inc.php");
echo "Opdateringen blev udført på: " . mysql_affected_rows() . " rækker.\n<br>";
echo "<br>\n";
echo $sql . "<br>\n";
echo "<br>\n";
echo "<a href='index.php'>Tilbage til Forsiden.</a><br>\n";
include("inc/footer.inc.php");
?>
Skrevet fre. d. 01. oktober 2004 kl. 19:22:53| #1
at god dag. ;)' , WHERE cprnr = 'skjult'
det komma skal vist ikke være der !!
Skrevet fre. d. 01. oktober 2004 kl. 19:23:33| #2
Check også om
løn_fast = '120000'
virkelig skal være en streng
Skrevet fre. d. 01. oktober 2004 kl. 19:27:35| #3
komma... har jeg virkeligt siddet her og gloet og ventet på svar så længe pga et overset komma...
damn.. hader når man ser sig blind på tingene..
tjekker lidt.
Skrevet fre. d. 01. oktober 2004 kl. 19:29:46| #4
Skrevet fre. d. 01. oktober 2004 kl. 19:31:59| #5
okey det komma skal ikke være der, men hvordan får jeg det væk??
if($i != (count($felt)-1)) {
$sql .= ", ";
}
den her fejler åbenlyst... :(
Skrevet fre. d. 01. oktober 2004 kl. 19:41:03| #6
Lidt mystisk.
Den kode ser fin ud.
Skrevet fre. d. 01. oktober 2004 kl. 19:42:37| #7
det øverste output, er fra php siden, som jeg så smed ind i phpmyadmin... derfor ved jeg at den ikke virker...
Skrevet fre. d. 01. oktober 2004 kl. 19:44:43| #8
Skrevet fre. d. 01. oktober 2004 kl. 19:45:31| #9
if($felt[$i] != "id" AND $felt[$i] != "created") {
der sotere vi 2 fra... så den skal se sådan her ud:
if($i != (count($felt)-2)) {
$sql .= ", ";
}
Skrevet fre. d. 01. oktober 2004 kl. 19:47:11| #10
men smid lige et svar, for du fik trodsalt sporet mig ind i den rigtige retning. ;)
Skrevet fre. d. 01. oktober 2004 kl. 19:52:59| #11
Skrevet fre. d. 01. oktober 2004 kl. 19:53:41| #12
Kunne du ikke flytte den if derop hvor du smider i arrayet ?
Det ville vel gøre logikken lidt mere robust for tilføjelse af nye felter.
Skrevet fre. d. 01. oktober 2004 kl. 19:57:29| #13
nu er jeg ikke helt med... prøv lige at smide et eksempel.
Skrevet fre. d. 01. oktober 2004 kl. 20:06:29| #14
Jeg vil fjerne id og created ikke i den for løkke som laver sql strengen, men
i den for løkke osm konstrurerer field arrayet.
Skrevet fre. d. 01. oktober 2004 kl. 20:06:40| #15
nåårh nu kan jeg se hvad du mener. :)
Men det vil aldrig blive et problem, det er fordi at jeg sotere de felter fra som ikke skal opdateres i databasen, og det er jo klart at de felter så skal trækkes fra, når der skal sættes kommaer. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:06:43| #16
Skrevet fre. d. 01. oktober 2004 kl. 20:09:03| #17
okey prøv lige at smide et eksempel, for er lidt lost lige nu så...
Skrevet fre. d. 01. oktober 2004 kl. 20:12:30| #18
lige et hurtigt fil spørgsmål. :)
$handle2 = fopen("admin/tmp_dl/brugere.txt", "a"); // Opretter tmp filen.
fwrite($handle2, $file_msg); // Skriver til temp filen.
den her, åbner filen, og sætter "pointeren" til sidste linie, og skriver det ind, right?
jeg skal ikke have nogle \n eller noget vel?
Skrevet fre. d. 01. oktober 2004 kl. 20:14:37| #19
"a" = append
den placerer skrivningen efter sidste linie i filen.
Jeg antager at $file_msg slutter med en \n
Skrevet fre. d. 01. oktober 2004 kl. 20:16:13| #20
tjekker lige. ;)
Det er fordi at jeg har komveteret et andet script, hvor der ikke er brug for det.
da det kun er en enkel linie der skal skrives. ;)
men 2 sec.
Skrevet fre. d. 01. oktober 2004 kl. 20:16:59| #21
a b c d, skip d, undlad 4. komma => a,b,c,
a b c d, skip d, undlad 3. komma => a,b,c
a b c d e, skip d, undlad 3. komma => a,b,c e,
det er derfor at jeg tror at det er bedst at smide de unødvendige felter væk
i første for løkke
Skrevet fre. d. 01. oktober 2004 kl. 20:17:40| #22
function file_msg() {
global $mysql_field_names;
$file_msg = "";
$n = 1;
foreach($_REQUEST as $key=>$val) {
$file_msg .= $val . ";";
$n++;
}
$file_msg = substr_replace($file_msg, '', -1);
return $file_msg;
}
den ser sådan her ud... går ud fra at jeg bare kan lave den om til denne her:
function file_msg() {
global $mysql_field_names;
$file_msg = "";
$n = 1;
foreach($_REQUEST as $key=>$val) {
$file_msg .= $val . ";";
$n++;
}
$file_msg = substr_replace($file_msg, '', -1);
$file_msg .= "\n";
return $file_msg;
}
??
Skrevet fre. d. 01. oktober 2004 kl. 20:18:26| #23
Og det blev forkert. Jeg prøver igen:
a b c d, skip d, undlad komma sidste felt => a,b,c,
a b c d, skip d, undlad komma næstsidste felt => a,b,c
a b c d e, skip d, undlad komma næstsidste felt => a,b,c,e,
Skrevet fre. d. 01. oktober 2004 kl. 20:19:09| #24
den a b c d besked, kan du smide et eksempel på noget kode over hvordan du mener
for($i = 0; $i < mysql_num_fields($q); $i++) {
$felt[] = mysql_field_name($q ,$i);
}
skal se ud?
regner så med at jeg bare skal fjerne den i den anden. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:19:12| #25
Skrevet fre. d. 01. oktober 2004 kl. 20:21:04| #26
Skrevet fre. d. 01. oktober 2004 kl. 20:22:39| #27
for($i = 0; $i < mysql_num_fields($q); $i++) {
$felt[] = mysql_field_name($q ,$i);
}
...
for($i = 0; $i < count($felt); $i++) {
if($felt[$i] != "id" AND $felt[$i] != "created") {
$sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
if($i != (count($felt)-2)) {
$sql .= ", ";
}
}
}
->
for($i = 0; $i < mysql_num_fields($q); $i++) {
if(mysql_field_name($q ,$i) != "id" AND mysql_field_name($q ,$i) != "created") {
$felt[] = mysql_field_name($q ,$i);
}
}
...
for($i = 0; $i < count($felt); $i++) {
$sql .= "$felt[$i] = '" . $_POST{$felt[$i]} . "' ";
if($i != (count($felt)-1)) {
$sql .= ", ";
}
}
Skrevet fre. d. 01. oktober 2004 kl. 20:27:18| #28
hmmm der går den ind og fejler, for den sætter også cprnr, den lægger som nummer 2 felt i databasen...
sådan her lægger felterne i databasen.
id,
cprnr,
fornavn,
efternavn,
adresse,
postnr_by,
telefon,
mobil,
email,
kørekort,
bil,
arbejdstid,
job_situation,
job_ønske,
løn_fast,
løn_vikariat,
rådighed,
akasse,
ja_akasse,
opsigelse,
ryger,
straffeattest,
bureauer,
ja_bureauer,
bemærkninger
Skrevet fre. d. 01. oktober 2004 kl. 20:27:51| #29
og så for ikke at ændre på cprnr, så skal den ikke tage den med, og dvs. at jeg skal lave en større if...
Skrevet fre. d. 01. oktober 2004 kl. 20:31:09| #30
damn har lige fundet en fejl..
har fået sat feltet cprnr i databasen til at være int, dvs. at alle folk født før den 10'ne, så fejler den...
Skrevet fre. d. 01. oktober 2004 kl. 20:32:26| #31
og problemet ved din løsning blev løst ved at smide dette ind i for()'en som laver array'et:
AND mysql_field_name($q, $i) != "cprnr"
Skrevet fre. d. 01. oktober 2004 kl. 20:33:01| #32
Så tror jeg sQ at jeg har fået ordnet det hele i dette script. *G*
men tester det lige så venter jeg tilbage. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:36:45| #33
hvordan blev cprnr håndteret i den originale version ?
Skrevet fre. d. 01. oktober 2004 kl. 20:38:01| #34
uh hvor det virker. ;)
Jeg takker mange gange for hjælpen Arne. ;)
kan være der bliver smidt et nyt spørgsmål her om en lille 20min til halv time, om noget fil halløj. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:40:22| #35
så vidt jeg husker så lavede jeg en select fornavn, efternavn osv fra mysqlen, og brugte en array som jeg har som standard, for at kunne skrive felt navnet pænt. ;)
men det var WAY for besværligt. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:40:33| #36
:-)
PS: Iøvrigt skylder jeg da vist at fortælle dig at jeg så godt som aldrig programmerer
i PHP.
Skrevet fre. d. 01. oktober 2004 kl. 20:44:35| #37
WTF!!!!!!!!!!!
*GGG* damn, har programmeret i snart 3 år, normalt får jeg det også løst, men er under mega tidspres lidt nu.
skal hente en ven fra jylland i høje taastrup her klokken 22:33, så skal ud af døren om en lille time, og så skal der drikkes, og så har vi et møde med kunden som jeg laver denne side for klokken 10 i morgen hvor det hele skal være færdigt, så vil helst være færdig nu her før jeg tager afsted, og så finder jeg ingen anden udvej, end at spørge for at få det ordnet så hurtigt som muligt. ;)
Skrevet fre. d. 01. oktober 2004 kl. 20:48:40| #38
Jeg har programet i 21 år i assembler, Fortran, Pascal, C, C++, Java, VBA, JSP,
C#, VB.NET etc..
ASP og PHP er kun noget jeg sådan undtagelsesvist kigger på.
Skrevet fre. d. 01. oktober 2004 kl. 20:52:06| #39
wow...
jamen hvis du har tid, kan vi lige så godt tage den fil halløj ud så, hvis du har lyst?
Skrevet fre. d. 01. oktober 2004 kl. 20:52:23| #40
kan også oprette et nyt spørgsmål, hvis du vil have point for det?
Skrevet fre. d. 01. oktober 2004 kl. 20:56:17| #41
Hvad du nu finder mest passende.
Skrevet fre. d. 01. oktober 2004 kl. 21:00:04| #42
mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());
$sql = mysql_query("select * from sv_users");
$result = mysql_query($sql);
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
for($i = 0; $i < $antal; $i++) {
$row{$i} = ereg_replace("\n","", $row{$i});
$file_sql .= $row{$i} . ";";
}
$file_sql .= "\n";
}
echo $file_sql;
den her fejler.
under bemærkninger, hvis en bruger nu laver ... linie skift, så laver den også linie skift, i outputtet, og det skal den ikke, og det er det jeg prøver at rette.
Nogle ideer?
Skrevet fre. d. 01. oktober 2004 kl. 21:03:20| #43
Det er fordi at kunden skal kunne downloade en komma sepereret fil, til brug i access database, og har så fået det lavet sådan at han klikker på et link, og så downloader den filen. ;)
men vil gerne have at alt står som det skal. ;)
Skrevet fre. d. 01. oktober 2004 kl. 21:05:15| #44
okey se lige bort fra $result = mysql_query($sql);
;)
den er RET så unødvendig. :)
Skrevet fre. d. 01. oktober 2004 kl. 21:07:28| #45
Er problemet at linie skiftene kommer med alligevel ?
Skrevet fre. d. 01. oktober 2004 kl. 21:08:42| #46
Har du prøvet:
$row{$i} = ereg_replace("\\n","", $row{$i});
altså med 2 backslasher
Skrevet fre. d. 01. oktober 2004 kl. 21:10:17| #47
ahhh... prøver lige. ;)
men det plejer nu ikke at være et problem, det er sådan jeg har gjort de andre steder, men prøver lige. ;)
Skrevet fre. d. 01. oktober 2004 kl. 21:10:41| #48
Skrevet fre. d. 01. oktober 2004 kl. 21:13:28| #49
tror jeg lige jeg opretter et nyt spørgsmål, kan jo være andre har en løsning. ;)
no offence. ;)
Skrevet fre. d. 01. oktober 2004 kl. 21:16:41| #50
Skrevet fre. d. 01. oktober 2004 kl. 21:19:05| #51
Det er ikke \\n så du kan godt fjerne den ene backslash igen