bigsky skrev:
<?php
$con = mysqli_connect("","","","");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="
DECLARE @i int = 1
CREATE TABLE #Dummy(
Tal int,
IsField bit
)
WHILE @i < 97 DO
BEGIN
INSERT INTO #Dummy (Tal, IsField)
SELECT @i, CASE WHEN @i < 58 THEN 1 ELSE 0 END
SET @i = @i + 1
END
INSERT INTO YourTable(Id, Field)
SELECT
I.Tal,
F.Tal
FROM
#Dummy I
CROSS JOIN (
SELECT Tal FROM #Dummy D WHERE IsField = 1
) AS F
ORDER BY
I.Tal,
F.Tal
DROP TABLE #Dummy
";
if (mysqli_query($con,$sql))
{
echo "Success!";
}
else
{
echo "Error: " . mysqli_error($con);
}
?>
Får felmeddelandet (Har naturligtvis en korrekt databaskoppling annars):
Error: 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 'DECLARE @i int = 1; CREATE TABLE #Dummy( Tal int, IsField bit ) WHILE @i <' at line 1
Det är många år sedan jag senaste programmerade mot MySQL och när du kör hela uttrycket på en gång kan det vara svårt att gissa vad som egentligen inte fungerar.
Några saker du kan prova:
- Ändra variabelhanteringen (WHILE i MySQL, Variabler i MySQL)
- Stoppa in ';' på alla ställen där ett visst uttryck tar slut. Förhopningsvis får du tydligare felmeddelanden då.
- Kör delar av lösningen i taget för att se var det egentligen kraschar.
Pröva t.ex.: (Se länkar ovan)
DECLARE i int DEFAULT 1;
CREATE TABLE #Dummy(
Tal int,
IsField bit
);
WHILE i < 97 DO
INSERT INTO #Dummy (Tal, IsField)
SELECT i, CASE WHEN i < 58 THEN 1 ELSE 0 END
SET i = i + 1
END WHILE;
INSERT INTO YourTable(Id, Field)
SELECT
I.Tal,
F.Tal
FROM
#Dummy I
CROSS JOIN (
SELECT Tal FROM #Dummy D WHERE IsField = 1
) AS F
ORDER BY
I.Tal,
F.Tal
;
DROP TABLE #Dummy;
eller (Se länkar ovan)
SET @i = 1;
CREATE TABLE #Dummy(
Tal int,
IsField bit
);
WHILE @i < 97 DO
INSERT INTO #Dummy (Tal, IsField)
SELECT @i, CASE WHEN @i < 58 THEN 1 ELSE 0 END
SET @i = @i + 1
END WHILE;
INSERT INTO YourTable(Id, Field)
SELECT
I.Tal,
F.Tal
FROM
#Dummy I
CROSS JOIN (
SELECT Tal FROM #Dummy D WHERE IsField = 1
) AS F
ORDER BY
I.Tal,
F.Tal
;
DROP TABLE #Dummy;
eller (vanligt sunt förnuft ;) )
försök att köra bit för bit:
DECLARE i int DEFAULT 1;
SELECT 'Gick'
Om det funkar så funkar variabeltilldelningen.
CREATE TABLE #Dummy(
Tal int,
IsField bit
);
SELECT * FROM #Dummy; //Så klart tom
DROP TABLE #Dummy;
Funkar hanteringen av temptabeller?
DECLARE i int DEFAULT 1;
WHILE i < 10 DO
SELECT i, CASE WHEN i < 58 THEN 1 ELSE 0 END
SET i = i + 1
END WHILE;
Funkar while-slingan?
Då bör du, om inte förr, hitta var felet faktiskt är. Då kan man leta efter lösningar därifrån.