webForumDet fria alternativet

Problem med min Wiki, Fel fast den uppdaterar?

ASP

15 svar · 391 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

Hej!

har ett antal märkliga problem med min Wiki (OpenwikiNG), Den är kopplad mot en MySQL-databas. Får konstiga felmeddelanden tex, när jag ska spara ned en ny wiki-sida eller uppdatera en befintlig, det konstiga är att ändringarna utförs, men får ett felmeddelanden. Börjar fundera om koden verkligen fungerar tillsammans med en MySQL-databas eller om det är felprogrammerat.

Lite utvalda felmeddelanden och kod.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.22]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 'FROM openwiki_attachments, (SELECT att_wrv_name, att_name, MAX(

/ow/owdb.asp, line 1510

		else
			vQuery = "UPDATE openwiki_attachments" & _
					" SET att_wrv_revision = " & vRevision & _
					" FROM openwiki_attachments, (SELECT att_wrv_name, att_name, MAX(att_revision) AS LatestRev FROM openwiki_attachments" & _
					" WHERE att_wrv_name = '" & Replace(gPage, "'", "''") & "' AND att_deprecated = 0 GROUP BY att_wrv_name, att_name) AS o1" & _
					" WHERE o1.att_name = openwiki_attachments.att_name AND att_revision=o1.LatestRev AND openwiki_attachments.att_wrv_name = o1.att_wrv_name;"
		end if

		[B]conn.execute(vQuery)[/B]

Och ett annat förekommande felmeddelande!

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.22]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 '(bll_name, '<a href=''http://www.openwiking.com/HelpWiki/?HelpW

/ow/plugins/owplugin_badlinklist.asp, line 125

'        // ACTIVE CODE
Function A_ReplaceBadLink(vLink)
    Dim szSQL,pText,vURL
    '	// Do a TSQL version of 'Instr' to see if a banned list item is in this link
    If OPENWIKI_DB_SYNTAX = DB_ACCESS Then
        szSQL="SELECT * FROM openwiki_badlinklist WHERE (InStr(1,'" & Replace(vLink,"'","''") & "',bll_name,1) > 0);"
    ElseIf OPENWIKI_DB_SYNTAX = DB_FIREBIRD then
        szSQL="SELECT * FROM openwiki_badlinklist WHERE '" & Replace(vLink,"'","''") & "' LIKE '%' || bll_name || '%';" 
    else
      [U]  szSQL="SELECT bll_comment FROM openwiki_badlinklist WHERE (CHARINDEX(bll_name, '" & Replace(vLink,"'","''") & "',1) > 0);"[/U]
    End If 
    oConn.Open OPENWIKI_DB
    [B]oRs.Open szSQL,oConn,adOpenForwardOnly[/B]

Fetmarkerade är den rad som den klagar på... håller bokstavligen på att riva av mig håret nu.. SÅ nära att ha en fungerande Wiki, men ändå så långt borta.. :l

PS, den är gjort för att kunna köras på access, oraqle, mssql och MySQL. Och det mesta fungerar! http://wiki.securityfocus.se testa att editera en sida! Sidan uppdateras men du får ett felmeddelande också. Annars får jag lägga Wiki-planerna på hyllan helt enkelt. :bla

Medlem sedan juni 200032 967 inlägg
#2

Vilken version av MySQL? Versioner tidigare än 4.1 stödjer inte subqueries. På felmeddelandet ser det ut som om det är 4.0.22.

Dessutom är det alltid mer intressant att se den färdiga sql-frågan. Så, skriv ut felande sql-frågor med response.write, så är det lättare att se vad som är fel.

Medlem sedan mars 20023 686 inlägg
#3

Använder mig av webbhotellet Neno.se

Vi använder för närvarande version 4.x av MySQL. Vi har inga direkta planer på att uppgradera till version 5 men undersöker samtidigt möjligheterna.

Medlem sedan juni 200032 967 inlägg
#4

4.x är ett bra, och välspecificerat versionsnummer. :l

Om det nu är lägre än 4.1, då får du byta ut alla sql-frågor som använder subqueries.

Medlem sedan mars 20023 686 inlägg
#5

@nders skrev:

4.x är ett bra, och välspecificerat versionsnummer. :l

Visst är det! x(

Här kommer det jag fick ut av Response.write på den första:

UPDATE openwiki_attachments SET att_wrv_revision = 6 FROM openwiki_attachments, (SELECT att_wrv_name, att_name, MAX(att_revision) AS LatestRev FROM openwiki_attachments WHERE att_wrv_name = '0x80' AND att_deprecated = 0 GROUP BY att_wrv_name, att_name) AS o1 WHERE o1.att_name = openwiki_attachments.att_name AND att_revision=o1.LatestRev AND openwiki_attachments.att_wrv_name = o1.att_wrv_name; 

^Det där skrevs ut...^

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
[MySQL][ODBC 3.51 Driver][mysqld-4.0.22]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 'FROM openwiki_attachments, (SELECT att_wrv_name, att_name, MAX( 

/ow/owdb.asp, line 1512

Och utskriften av den nedre:

SELECT bll_comment FROM openwiki_badlinklist WHERE (CHARINDEX(bll_name, 'http://www.openwiking.com/images/DevTeam.jpg',1) > 0); 

^Det där skrevs ut...^

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
[MySQL][ODBC 3.51 Driver][mysqld-4.0.22]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 '(bll_name, '<a href="http://www.openwiking.com/images/DevTeam.j 

/ow/plugins/owplugin_badlinklist.asp, line 128
Medlem sedan mars 20023 686 inlägg
#6

@nders skrev:

Om det nu är lägre än 4.1, då får du byta ut alla sql-frågor som använder subqueries.

Vad ska jag byta ut dessa mot? Hur, När, Var, Vad. Detta är för avancerat för mig, Vet inte ens vad subqueries är och än mindre vad dess motsvarighet i MySQL skulle vara om min mysql-server är en gammal version... :l

Medlem sedan juni 200032 967 inlägg
#7

Det första av de två felen ser ut att bero på att det i SQL-frågan används en subquery, och versionen av MySQL är för gammal.

Det andra felet verkar vara att funktionen CHARINDEX() inte ens finns i MySQL. Det skall nog vara INSTR() i MySQL.

Medlem sedan juni 200032 967 inlägg
#8

Vad ska jag byta ut dessa mot? Hur, När, Var, Vad.

Till frågor som inte använder subqueries... Det finns inget generellt svar på denna fråga.

Vet inte ens vad subqueries är

Det är när man som del av en SQL-fråga använder en annan SQL-fråga. I ditt fall (det första felet), är det fetstilta en subquery:

UPDATE openwiki_attachments SET att_wrv_revision = 6 
FROM openwiki_attachments, 
[b](SELECT att_wrv_name, att_name, MAX(att_revision) AS LatestRev 
FROM openwiki_attachments 
WHERE att_wrv_name = '0x80' AND att_deprecated = 0 
GROUP BY att_wrv_name, att_name)[/b] AS o1 
WHERE o1.att_name = openwiki_attachments.att_name 
AND att_revision=o1.LatestRev AND openwiki_attachments.att_wrv_name = o1.att_wrv_name;
Medlem sedan mars 20023 686 inlägg
#9

@nders skrev:

Det andra felet verkar vara att funktionen CHARINDEX() inte ens finns i MySQL. Det skall nog vara INSTR() i MySQL.

nja, det ska tydligen vara LOCATE, och nu fungerar den biten, Nu är det bara att försökta hitta något sätt att skriva om subqueries så att min Mysql-version förstår...

Aja, ett problem mindre att vara upprörd över...

Medlem sedan mars 20023 686 inlägg
#10

Fick följande kod, men den fungerar inte riktigt,

vQuery = "UPDATE openwiki_attachments o1" & _
 " SET att_wrv_revision = " & vRevision & _
 " WHERE att_wrv_name = ' & Replace(gPage, "'", "''") & "'" & _
 " AND att_deprecated = 0" & _
 " AND att_wrv_revision = (SELECT MAX(att_wrv_revision)" & _
 " FROM openwiki_attachments o2" & _
 " WHERE o2.att_wrv_name = o1.att_wrv_name" & _
 " AND o2.att_name = o1.att_name)"
Microsoft VBScript compilation error '800a0400'

Expected statement

/ow/owdb.asp, line 1515

" AND att_deprecated = 0" & _
Medlem sedan juni 200032 967 inlägg
#11

Det är bara att sätta igång och kontrollera sina citationstecken...

 " WHERE att_wrv_name = '[b]"[/b] & Replace(gPage, "'", "''") & "'" & _
Medlem sedan mars 20023 686 inlägg
#12

@nders skrev:

Det är bara att sätta igång och kontrollera sina citationstecken...

 " WHERE att_wrv_name = '[b]"[/b] & Replace(gPage, "'", "''") & "'" & _

Jo, såg det, blir ju tamig fan nästan blind av alla fnuttar som behövs. :e

Men nu uppstod ett nytt problem några rader ned, Men det börjar arta sig iaf :)

[MySQL][ODBC 3.51 Driver][mysqld-4.0.22]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 'SELECT MAX(att_wrv_revision) FROM openwiki_attachments o2 WHERE

Medlem sedan juni 200032 967 inlägg
#13

Tja, du har ju fortfarande en subquery i din SQL-fråga, så...

Medlem sedan mars 20023 686 inlägg
#14

@nders skrev:

Tja, du har ju fortfarande en subquery i din SQL-fråga, så...

Stämmer bra du, tror jag helt enkelt lägger ned försöket att använda mig av MySQL-databas och byter ut den mot Access-databasen igen.

Tack för all hjälp @nders! :)

Medlem sedan juni 200032 967 inlägg
#15

Vasse!

Dessvärre finns det inget "enkelt" sätt att bara översätta SQL-frågor med subqueries, till frågor utan. Det blir krångligt, och kladdigt, och det enklaste är att se till att använda en vettig (dvs icke apgammal) version av MySQL. :)

mvh

Medlem sedan mars 20023 686 inlägg
#16

@nders skrev:

Vasse!

Dessvärre finns det inget "enkelt" sätt att bara översätta SQL-frågor med subqueries, till frågor utan. Det blir krångligt, och kladdigt, och det enklaste är att se till att använda en vettig (dvs icke apgammal) version av MySQL. :)

mvh

Hehe, du har så rätt så! Men jag slängde iväg en fråga till webbhotellet, Neno.se som jag använder och fick följande svar precis.

Vi kör idag version 4.0.22 på den server som du ligger på. För
närvarande har vi inga planer på att uppdatera denna server, dock kommer
vi inom den närmaste månaden att erbjuda MySQL 5.0 för dom som vill
kunna använda subqueries osv.

Något exakt datum när vi kommer kunna erbjuda detta har jag inte, men
som sagt någon gång under mars eller april.

Hoppas verkligen att detta är kostnadsfritt, vill ju inte sitta med en apgammal databas som man inte kan ställa frågor på rätt sätt.

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)