Hallo, dit is mijn eerste topic :D

Ik zit nu al een volledige dag te sukkelen met een bepaalde query, probleem is, ik weet begot niet wat er mis mee is.

Mijn query:

$visitorsCounter = Core::$database->prepare('UPDATE visitors_stats SET ? = ? + 1 WHERE year = ?')->bind_param(Date("m"), Date("m"), Date("Y"))->execute();



De error die ik verkrijg is de volgende:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 '? = ? + 1 WHERE year = ?' at line 1' in C:\xampp\htdocs\system\class.database.php:33
Stack trace:
#0 C:\xampp\htdocs\system\class.database.php(33): PDO->prepare('UPDATE visitors...')
#1 C:\xampp\htdocs\pages\index.php(27): Database->prepare('UPDATE visitors...')
#2 C:\xampp\htdocs\system\class.template.php(36): require_once('C:\xampp\htdocs...')
#3 C:\xampp\htdocs\page.php(16): Template::getPage('index')
#4 {main}
thrown in C:\xampp\htdocs\system\class.database.php on line 33

Ik weet dat de fout dus in mijn query zit in dit stuk:
SET ? = ? + 1 WHERE year = ?


Maar wat doe ik mis dan?
Om te beginnen is je query onlogisch:

UPDATE visitors_stats SET ? = ? + 1 WHERE year = ?

Als je deze invult, staat er voor augustus (maand 8) eigenlijk zoiets:

UPDATE visitors_stats SET 8 = 9 WHERE year = 2014

Letterlijk betekent dit: geef kolom 8 in de databasetabel visitors_stats de waarde 9 voor alle rijen waar de kolom year in de tabel visitors_stats de waarde 2014 bevat.
Ward van der Put op 02/08/2014 15:29:23

Om te beginnen is je query onlogisch:

UPDATE visitors_stats SET ? = ? + 1 WHERE year = ?

Als je deze invult, staat er voor augustus (maand 8) eigenlijk zoiets:

UPDATE visitors_stats SET 8 = 9 WHERE year = 2014

Letterlijk betekent dit: geef kolom 8 in de databasetabel visitors_stats de waarde 9 voor alle rijen waar de kolom year in de tabel visitors_stats de waarde 2014 bevat.


Hoe moet het dan wel?
Geef eens de volledige structuur van de tabel visitors_stats?
Volgens mij moet dit gewoon werken?

UPDATE visitors_stats SET veldnaam=veldnaam+1 WHERE year = '2014'

Hij verhoogt het nummer in de kolom veldnaam met 1...
Dan moet je toch backticks `08` gebruiken voor de kolom van augustus, anders krijg je de clausule:

SET 8 = 8 + 1

en dat is altijd:

SET 8 = 9
Wel, wat er moet gebeuren is, hij moet dus telkens 1 bijvoegen in de correcte tabel van de correcte maand.
Dus bijvoorbeeld maand 08 iemand gaat op de page, hij update hij plaatst in de column van jaar 2014 row 08 plaatst hij 1 bij bij het getal dat er nu staat.

Dus stel er staat in column 08 het getal 77 dan moet hij indien er een bezoeker die page bezoekt moet hij van die 77, 78 maken.
Dan moet je dus een query gebruiken die dit uitvoert:

SET `08` = `08` + 1 WHERE `year` = 2014

Deze query werkt wel:

UPDATE visitors_stats SET visitors_stats.05 = '55'+1 WHERE `year` = '2014';

Maar deze gebruik ik dan in navicat als builder zeg maar.
Dan werkt dit ook:

UPDATE visitors_stats SET `05` = `05` + 1 WHERE `year` = 2014

Het verschil: `05` is een naam en '05' is een waarde.

Reageren