Saan nykyään ihan päättömiä erroreita. Esimerkkinä on nyt tullut "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 'read = 1 WHERE id = 2' at line 1". Kyselyni näyttää tältä:
UPDATE viestit SET read = 1 WHERE id = $id
En ymmärrä mikä tässä on vialla, mielestäni tässä ei ole mitään vikaa.
<?php if($user) { $ky = mysql_query("SELECT * FROM viestit WHERE id = '".$_GET["id"]."'") or die(mysql_error()); $to = mysql_fetch_array($ky); echo "<br>"; if($user["id"] == $to["vastaanottaja_id"]) { $id = $_GET["id"]; mysql_query("UPDATE viestit SET read = 1 WHERE id = $id"); echo "<tr><td><div style=\"float: left\">Otsikko: ".$to["otsikko"]." | Lähettäjä: ".$to["lahettaja"]." [".date("d.m.Y H:i:s", $to["aika"])."]</div> <div style=\"float: right\"><a href=\"index.php?sivu=lahetaviesti&vastaus=". $to["lahettaja"]."&vl=".$to["otsikko"]."\">Vastaa</a></div><br><hr>". $to["viesti"]."</td></tr>"; } } else die(); ?>
read ja id ovat numerotyyppiä? int tms. Pastea vaikka taulumäärittely: show create table viestit.
Ja php-mysql:n vakiovirhe sinulla myös: sijoitat käyttäjän syötteen suoraan tietokantakyselyyn. Käytä vaikka intval()-funktiota välissä putsaamaan pois muut kuin kokonaisluvut.
Select-lauseessa sinulla on heittomerkit id:n ympärillä. Poista ne.
id|lahettaja|lahettaja_id|vastaanottaja|vastaaottaja_id|otsikko|viesti|aika|read
Tuolta näyttää taulu viestit. Osaisiko joku sanoa, mikä tuossa UPDATE kyselyssä on väärin? En näe siinä vieläkään mitään väärää. :S
Numeroissa käytetään '-merkkejä, jos en täysin väärin muista.
Taitaapi olla kuules juuri toisin päin ;)
Rocceri kirjoitti:
id|lahettaja|lahettaja_id|vastaanottaja|vastaaottaja_id|otsikko|viesti|aika|readTuolta näyttää taulu viestit.
Tuossa lukee vastaaottaja, n puuttuu, mutta se lienee vain typo viestissäsi.
Kenttien nimet eivät yksin kiinnostaneet, vaan myös niiden tyypit, jotka eivät tuosta näy. Tarkista että id ja read ovat kokonaislukuja.
Kannattaa myös tulostaa se kyselylauseke, esim. näin (lisäsin myös intvalin):
Smuliii kirjoitti:
Numeroissa käytetään '-merkkejä, jos en täysin väärin muista.
Numeroissa just ei käytetä, vaan stringeissä käytetään.
Chiman kirjoitti:
Tuossa lukee vastaaottaja, n puuttuu
Kun käsin kirjotin, niin tuli kirjoitusvirhe ;)
Chiman kirjoitti:
Kenttien nimet eivät yksin kiinnostaneet, vaan myös niiden tyypit, jotka eivät tuosta näy.
INT, TEXT, INT, TEXT, INT, TEXT, TEXT, INT, INT vasemmalta oikealle. Numerot on kaikki INT ja muu teksti TEXT.
Chiman kirjoitti:
$id = intval($_GET["id"]); $sql = "UPDATE viestit SET read = 1 WHERE id = $id"; echo "sql: '{$sql}'\n"; mysql_query($sql);
Samaa erroria tuppaa tulemaan.
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 'read = 1 WHERE id = 2' at line 1
Ei tuossa kyllä ole mitään vikaa ainakaan äkkiseltään huomaa. Ootko kokeillu ajaa kyselyä suoraan jostain sql komento ohjelmasta (kuten sqlyog, heidisql tai mysql komentorivi) toimiiko se siellä yleensäkää millään arvoilla?
TeNDoLLA kirjoitti:
Ei tuossa kyllä ole mitään vikaa ainakaan äkkiseltään huomaa. Ootko kokeillu ajaa kyselyä suoraan jostain sql komento ohjelmasta (kuten sqlyog, heidisql tai mysql komentorivi) toimiiko se siellä yleensäkää millään arvoilla?
PhpMyAdmin palauttaa saman arvon, niinkuin kaikki muutkin.
Kyselyni lakkasivat toimimasta, kun aloin tallentamaan tiedostot UTF-8 koodauksella. :/ Vain pieni osa toimii.
En kyllä tiedä tähän hätään eikä ehdi perehtyyn enempää nytten, mutta varmin tapa saada toimiin on, että jokapaikassa on samat character setit. Http-meta tagit, php headereissä, kannan taulut/kanta ja tiedostot.
Voit kattoa mikä setti sulla on kannassa vaikka näin php:lta käsin
<?php $test = mysql_query("SHOW VARIABLES LIKE 'ch%';"); var_dump(mysql_fetch_array($test)); ?>
Voit myös koittaa laittaa tämän heti yhteyden muodostuksen perään
<?php mysql_query("SET NAMES utf8"); ?>
Ja täältä lisäinfoa:
http://dev.mysql.com/doc/refman/5.1/en/charset.
Kyselyyn puolipiste?
Rocceri kirjoitti:
Chiman kirjoitti:
$id = intval($_GET["id"]); $sql = "UPDATE viestit SET read = 1 WHERE id = $id"; echo "sql: '{$sql}'\n"; mysql_query($sql);Samaa erroria tuppaa tulemaan.
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 'read = 1 WHERE id = 2' at line 1
Tottakai sama virhe tuli, mutta millaisen sql-lauseen tuo echo-kohta tulosti? Laitoin sen debug-tulostukseksi, jotta näkee koko lauseen sellaisena kuin se meni, eikä vain osaa siitä.
GimPeltzi: puolipistettä ei tule noihin.
Muoks: Kirjoita vaikka tuon kyselyn välilyönnit uusiksi siltä varalta, että olisit laittanut siihen johonkin jotain muuta kuin tavallisen spacen.
onkos read varattu nimi?
Lebe80 sen keksi :) http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html
tämä toiminee:
mysql_query("UPDATE viestit SET `read` = 1 WHERE id = $id");
Kyllä, tämä toimii hienosti ;)
Kiitos teille avusta. Yksi kysymys vielä, toimiiko tämä `` tyyli vaikka se ei olisi varattu nimi? Eli kaikki voisi olla `taulu` tyylillä?
Juu, kaikki kenttien ja taulujen nimet voi MySQL:ssä laittaa ``-merkkien väliin.
Oraclessa ja PostgreSQL:ssä vastaavasti "Nimi"
MSSQL:ssä [Nimi]
Selvä, kiitos. Toivottavasti tämä auttaa myöhemmin muuallakin :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.