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?
Ward van der Put op 02/08/2014 16:11:42

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.


Die werkt, in mijn console. via PHP niet meer.
Zoek dan eens in je code naar de verschillen...
Ik zeg het toch? Het werkt niet in mijn PHP.

Foutcode:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '?' in 'field list'' 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(29): 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
1054 Unknown column '?' in 'field list''

Waar komt het vraagteken vandaan?
En wat vertelt die foutmelding je na lezing van het voorgaande?

Column not found: 1054 Unknown column '?' in 'field list' zou zomaar kunnen betekenen dat de kolom '?' niet wordt gevonden omdat die '08' heet of omdat je '...' gebruikt waar het `...` zou moeten zijn.
Kun je met bind wel kolomnamen invoegen?

Daarnaast: genummerde kolomnamen? Zelfs als je weet dat het er maar 12 zijn: je haalt je problemen als bovenstaande op de hals, maar ook: hoe haal je de ttoalen op van zeg de periode tussen feb en augustus? Op basis van 2 ingevoerde datums?

Een tabel als

Teller int
Maand
jaar

Maakt je al flexibeler

Update tabel set teller =mteller +1 where maand =8 and ywar = 2014

Desnoods met een insert als affected rows 0 blijkt.

Nog beter, sla de hele datum op,want als over 1 jaar blijkt dat je toch graag de bezoeken om zondag had willen hebben, dan heb je dat niet. En van hele datum naar per maand kost geen moeite,maar omgekeerd kan niet.


4
Precies.

Gewoon voor elke bezoek (als het om bezoekers gaat) een rij toevoegen met daarin tijd/datum.

Dan kan je er alles mee.

Reageren