Fout in mijn query
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:
Code (php)
1
$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:
Quote:
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
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:
Maar wat doe ik mis dan?
Gewijzigd op 02/08/2014 14:34:25 door Advil Denvil
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.
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?
UPDATE visitors_stats SET veldnaam=veldnaam+1 WHERE year = '2014'
Hij verhoogt het nummer in de kolom veldnaam met 1...
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.
SET `08` = `08` + 1 WHERE `year` = 2014
UPDATE visitors_stats SET visitors_stats.05 = '55'+1 WHERE `year` = '2014';
Maar deze gebruik ik dan in navicat als builder zeg maar.
UPDATE visitors_stats SET `05` = `05` + 1 WHERE `year` = 2014
Het verschil: `05` is een naam en '05' is een waarde.
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.
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...
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
Waar komt het vraagteken vandaan?
Weet ik niet.
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.
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
Gewoon voor elke bezoek (als het om bezoekers gaat) een rij toevoegen met daarin tijd/datum.
Dan kan je er alles mee.