SQL syntax

Tags:    mysql php

<< < 123 > >>
Jeg er i gang med et nyhedssystem, hvor det er muligt for brugeren at kunne loade nogle billeder med. Problemet er bare, at den ikke smider billederne ind i databasen eller folderen, men den skriver fint nyheden ind.

Der hvor jeg er kommet frem til at fejlen må være er her (fejl fundet ved hjælp af die(print_r($files)):
Fold kodeboks ind/udPHP kode 


Jeg modtager denne "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 '' at line 1"

Jeg har nu ledt og ledt og ledt. Men jeg kan simpelthen ikke finde ud af, hvad det er der er galt. Nogen der kan hjælpe? :s




26 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Det kunne tyde på at de værdier du forsøger at indsætte i database, indeholder et tegn som SQL ikke kan li'. F.eks et en quote: ' - som du også bruger til at definerer streng start og slut i dine SQLs.

Løsningen kan være:

$headline = mysql_escape_string($_POST['headline']);
$bodytext = mysql_escape_string($_POST['bodytext']);

Helvede er dog at MySQL driveren er under udfasning og erstattes med den nye MySQLi driver. Så du møder et stort problem den da MySQL driveren forsvinder helt. :)



print_r kan ikke stå alene, den viser kun indholdet af af arrayet, ikke syntax fejl, og manglende erklæringer af variable, manglende $ tegn mm
så under udvikling SKAL error_reporting være slået til.

hvis du har fuldt indlægget 01.12.13 14:14, så kommer den ene fil op på serveren, og der står det rigtige i sql sætningen,

hvordan ser din komplette code ud




prøv at lave dette

$query = ("INSERT INTO news (headline, bodytext, date) VALUES ('{$headline}', '{$bodytext}', now())") or die(mysql_error());
$result = mysql_query($query, $connection);


om til

$query = "INSERT INTO news (headline, bodytext, date) VALUES ('$headline', '$bodytext', NOW())";
$result = mysql_query($query, $connection) or die(mysql_error());


kig på linje 7

Fold kodeboks ind/udKode 


hvad laver det semicolon i slutningen af din foreeach ??
for hver file laver du ingen ting, hvorefter du starter en block.
start med at fjerne semicolon, så blokken bliver udført med data
Fold kodeboks ind/udKode 


mens du er igang med rettelser så skift dit mysql API
http://php.net/manual/en/mysqlinfo.api.choosing.php




Hej Ronny.

Tak for det hurtige svar, men desværre hjalp dette hellere ikke.
Der kommer intet ind i newsimg tabel i databasen eller i folderen.

Den du har set på er "news" som virker fint, så det går galt derefter.
Her kan du se hele mit script:

Fold kodeboks ind/udPHP kode 


Kan du se, hvad det er der går galt? :s

Ps. Jeg var godt det med mysql - mysqli. Dette er dog noget til min eksamen, og har valgt at holde mig til det jeg 100% kender :)



Hej Michael.

Det er som sagt ikke news det er galt med, det er billederne. Det andet går ind uden problemer :) Det er newsimg, nyheden headline og bodytext fungere uden problemer. Det er KUN billederne der ikke kommer videre.



hvordan ser din connection.php ud ??
hvis du har navngivet din $connection i connection.php skal du også anvende navnet i alle dine mysql_query
jeg kan se du anvender $connection i linje 85

linje 85
$result = mysql_query($query, $connection);

linje 92
mysql_query("INSERT INTO newsimg (newsID, images) VALUES ('$newsid', '$file'") or die(mysql_error());
skal se sådan ud
mysql_query("INSERT INTO newsimg (newsID, images) VALUES ('$newsid', '$file'", $connection) or die(mysql_error());


linje referancerer er fra indlæg Sassy @ 30.11.13 19:24

i det gamle API havde man ikke behøvet at navngive sin connection, da den så blev en super global connection, der blev anvendt som default parameter til mysql_query, men hvis man havde navngivet den skal den angives i alle mysql_query
det er en udemærket ide at vænne sig til at navngive sin connection, da når du skifter til et nyere API SKAL du angive din connection

hvad uddannelse er du i gang med ??, hvorhenne ??
hvis din uddannelse skal bruges til noget skal den opdateres til nutidens code, det nytter ikke at anvende matrialer der ikke er opdateret i mange år

ved at forsætte med at bruge det gamle API skyder du dig selv i foden med stor kaliber.

hvis du har opdateret din PHP til min Version 5.5.0 frigivet 20-Jun-2013, http://www.php.net/ChangeLog-5.php#5.3.27 har du fået advarsel, hvis du har slået error_reporting til

mysql:
This extension is now deprecated, and deprecation warnings will be generated when connections are established to databases via mysql_connect(), mysql_pconnect(), or through implicit connection: use MySQLi or PDO_MySQL instead




Skulle lige kigge en ekstra gang - du har en syntaksfejl i din SQL. :o)

"INSERT INTO newsimg (newsID, images) VALUES ('$newsid', '$file'"

Mangler en slut parentes.



Indlæg senest redigeret d. 01.12.2013 11:30 af Bruger #10216
som micharl skrev mangler der lige en slut parantes
mysql_query("INSERT INTO newsimg (newsID, images) VALUES ('$newsid', '$file'", $connection) or die(mysql_error());

skal se sådan ud (utested)
mysql_query("INSERT INTO newsimg (newsID, images) VALUES ('$newsid', '$file')", $connection) or die(mysql_error());


sådan vil jeg skrive det, så ligner det også den anden sql du har
Fold kodeboks ind/udKode 

og det er nemt at echo sql sætningen ud, som kontrol om det er det du forvendter der står der

jeg gider ikke teste det gamle API



Hej igen alle sammen :)

Tak for jeres svar, som er læst igennem og test - men det virker ikke endnu :s Andre forslag? Og tak fordi I gider hjælpe. Jeg synes bare det er underligt, at det slet ikke vil virke.

Nu bliver jeg ved med at få:
"Query was empty"



Indlæg senest redigeret d. 01.12.2013 12:57 af Bruger #17534
hvis du skriver sin sql sådan
Fold kodeboks ind/udKode 


hvilke data type er newsID og images



<< < 123 > >>
t