Avatar billede Slettet bruger
06. april 2012 - 12:39 Der er 29 kommentarer og
1 løsning

Kan ikke finde dejlen i - error in your SQL syntax

HVorfor giver den fejl i denne sætning:
$arrIds er defineret i koden.

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);

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
06. april 2012 - 12:53 #1
Du synes at mangle en 'condition', altså WHERE [et felt] = [et eller andet].  Syntaks for DELETE er her:

http://dev.mysql.com/doc/refman/5.0/en/delete.html
Avatar billede Slettet bruger
06. april 2012 - 12:58 #2
Hm, jeg har lavet en test her men ved ikke hvad min 'condition' skulle være, kan du evt. se det ud fra nedenstående :-)

<?php
include ('database.php');
$idag= time();

$sql = "SELECT `id`, `billede` FROM `tabel` WHERE `godkendt`='1' AND `date`<'".$idag."'";
$result = mysql_query($sql) or die (mysql_error());
echo '<p>Fandt '.mysql_num_rows($result).' for gamle billeder i databasen.</p>';

$arrIds = array();
while ($row=mysql_fetch_assoc($result)) {
    $arrIds[] = '`id`='.$row['id'];
    unlink("images/fotos/" . $row['billede']);
    unlink("images/fotos/thumb_" . $row['billede']);
}
echo '<p>'.count($arrIds).' billeder og thumbnails slettet i mappen.</p>';

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
$result = mysql_query($sql) or die (mysql_error());
echo '<p>'.mysql_affected_rows().' billeder slettet i databasen.</p>';
?>
Avatar billede michael_stim Ekspert
06. april 2012 - 13:01 #3
Som Christian er inde på, så skal det nok være noget á la:

$sql = "DELETE FROM `tabel` WHERE id in(".implode(',', $arrIds).");

Men er ikke til at vide, kun gætteri da vi ikke ved hvad dit array indeholder.

Prøv evt. at udskrive din sql, i stedet for at køre den.
06. april 2012 - 13:05 #4
Hvad vil du opnå?  Vil du slette gamle billeder, hvor gamle er ældre end '$idag'?

I så fald vil jeg foreslå dette:

$sql = "DELETE FROM `tabel` WHERE `godkendt` = '1' AND `date` < '$idag'";
Avatar billede olebole Juniormester
06. april 2012 - 13:08 #5
<ole>

Koden stammer fra mig, og jeg vil mene, den er helt i orden. Jeg vil dog ligesom michael_stim gerne se SQL-strengen skrevet ud.

Til Cristian og Michael kan jeg sige, at meningen er, at strengen skal komme ud på denne form:

DELETE FROM `tabel` WHERE `id`=123 OR `id`=234 OR `id`=456

/mvh
</bole>
Avatar billede Slettet bruger
06. april 2012 - 13:09 #6
Ja tak, ja det havde jeg også gjort men havde en længere diskussion med en anden bruger herinde som foreslog dette, læs evt. her: http://www.eksperten.dk/spm/960537#reply_7928536

så kan det være du forstår hvor han ville hen med det, men er det så lige meget med det der implode('OR', $arrIds) ?? :-)

$idag definere datoen idag(aktuelle dato)
Avatar billede Slettet bruger
06. april 2012 - 13:12 #7
skrevet ud:

DELETE FROM `events` WHERE 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

Tak olebole for løsningen, den ser ud til at fungere fint, bortset fra syntax error, men håber jeg vi får løst herinde :-)
Avatar billede olebole Juniormester
06. april 2012 - 13:22 #8
Det er ikke fejlen, men SQL'en jeg gerne vil se  =)

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
echo $sql.'<br>';
$result = mysql_query($sql) or die (mysql_error());
Avatar billede olebole Juniormester
06. april 2012 - 13:23 #9
- men jeg har vist ikke fået mail om din kommentar i den anden tråd, hvorfor jeg ikke har reageret der ... sorry  =)
Avatar billede Slettet bruger
06. april 2012 - 13:28 #10
Som jeg skrev før :-)

DELETE FROM `events` WHERE
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

Det er i orden olebole, måske kan du være behjælpelig her :-)
Avatar billede olebole Juniormester
06. april 2012 - 13:32 #11
Som jeg skrev før  =)

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
echo $sql.'<br>';
$result = mysql_query($sql) or die (mysql_error());
Avatar billede Slettet bruger
06. april 2012 - 13:36 #12
Når jeg bruger koden #11
udskriver den dette:

DELETE FROM `tabel` WHERE
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
Avatar billede olebole Juniormester
06. april 2012 - 13:44 #13
Det lyder sært. Så prøv denne:

$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
echo $sql.'<br>';
//$result = mysql_query($sql) or die (mysql_error());
Avatar billede Slettet bruger
06. april 2012 - 13:49 #14
den siger bare : DELETE FROM `tabel` WHERE
men det er jo nok fordi der er for mange '' et eller andet sted inmellem WHERE og .implode(' OR ', $arrIds); ??
Avatar billede olebole Juniormester
06. april 2012 - 13:53 #15
Nej, der må være noget, du ikke fortæller. Du må få skrevet SQL-sætningen ud. Jeg kan ikke gennemskue, hvad det er du gør galt, men koden i #13 giver et andet resultat
Avatar billede olebole Juniormester
06. april 2012 - 13:55 #16
Hvad får du ud af at skrive:

var_dump($arrIds);
$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);
Avatar billede olebole Juniormester
06. april 2012 - 13:58 #17
Men jeg tror, jeg også i denne tråd lader mig trække rundt ved næsen af ting, du gør - og som jeg ikke forstår  =)

Allerede i forrige tråd burde jeg vist have foreslået:

<?php
include ('database.php');
$idag= time();

$sql = "SELECT `id`, `billede` FROM `tabel` WHERE `godkendt`='1' AND `date`<'".$idag."'";
$result = mysql_query($sql) or die (mysql_error());
echo '<p>Fandt '.mysql_num_rows($result).' for gamle billeder i databasen.</p>';

while ($row=mysql_fetch_assoc($result)) {
    unlink("images/fotos/" . $row['billede']);
    unlink("images/fotos/thumb_" . $row['billede']);
}

$sql = "DELETE FROM `tabel` WHERE `godkendt`='1' AND `date`<'".$idag."'";
mysql_query($sql) or die (mysql_error());
echo '<p>'.mysql_affected_rows().' billeder slettet i databasen.</p>';
?>
Avatar billede Slettet bruger
06. april 2012 - 13:59 #18
var_dump($arrIds);
$sql = "DELETE FROM `tabel` WHERE ".implode(' OR ', $arrIds);

udskriver dette :

array(0) { } DELETE FROM `events` WHERE 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
Avatar billede olebole Juniormester
06. april 2012 - 14:02 #19
Ja, det er fordi, der ikke er billeder, der skal slettes. Prøv koden i #17 i stedet. Men husk, at du ikke kan tjekke, om det virker, hvis du ikke har billeder, der skal slettes. Denne kode bør dog ikke smide fejl, hvis ingen billeder skal slettes  *o)
Avatar billede Slettet bruger
06. april 2012 - 14:03 #20
Det vil sige at #17 virker og den skal jeg bruge i stedet for det du foreslog den anden dag ? :-)
Avatar billede olebole Juniormester
06. april 2012 - 14:05 #21
Ja, prøv den i stedet  =)
Avatar billede Slettet bruger
06. april 2012 - 14:09 #22
Tak det virker :-)

NIIICE!

smid et svar
Avatar billede olebole Juniormester
06. april 2012 - 14:12 #23
Ellers tak, jeg samler ikke point. Christian var faktisk inde på det rigtige i #4, så mon ikke han burde have dem?  =)

Undskyld, jeg lod mig forvirre i den forrige tråd. Havde jeg holdt hovedet lidt køligere, havde jeg sparet dig for en masse bøvl!  :o|
Avatar billede Slettet bruger
06. april 2012 - 14:15 #24
Det går nok, jeg fik det løst her til sidst :-)
Avatar billede Slettet bruger
09. april 2012 - 15:34 #25
svar
Avatar billede Slettet bruger
12. april 2012 - 14:36 #26
Hej Ole,
Tænkte på om du vidste hvordan jeg udbyggede koden så jeg fik et interval på 12 timer eller sådan noget, så den ikke sletter lige når datoen skifter men evt. 1 dag efter, så man faktisk kan se eventen på selve dagen også, for med den nuværende kode slette den jo med det samme dvs. kl. 00.01 og den skulle jo helst være synlig den aktuelle dato også om dagen :-)
Avatar billede olebole Juniormester
12. april 2012 - 14:46 #27
Ja, så kan du rykke $idag et antal timer frem - f.eks. 12:

$idag = time()+(60*60*12);

Ret de 12, hvis du ønsker et andet antal timer
Avatar billede Slettet bruger
13. april 2012 - 16:34 #28
Hm det prøvede jeg lige, det er som om at den sletter 12 timer forud? :-/ Hmm
testede det lige og der slettede en event der først var d. 14 april? det er jo i morgen først?! :-o
Avatar billede olebole Juniormester
13. april 2012 - 17:33 #29
Sorry, min fejl - meeeen det undrer mig, du ikke lige selv tænker dig lidt omkring  *o)

$idag = time()-(60*60*12);
Avatar billede Slettet bruger
13. april 2012 - 17:46 #30
Jamen jeg kan ikke kode php ;-)
Derfor jeg ikke tænker mig om, er grafiker, ikke programmeringsekspert :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester