Fout in mijn query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Advil Denvil

Advil Denvil

02/08/2014 14:33:53
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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

Ik weet dat de fout dus in mijn query zit in dit stuk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SET ? = ? + 1 WHERE year = ?


Maar wat doe ik mis dan?
Gewijzigd op 02/08/2014 14:34:25 door Advil Denvil
 
PHP hulp

PHP hulp

20/04/2024 08:42:48
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 15:29:23
Quote Anchor link
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.
 
Advil Denvil

Advil Denvil

02/08/2014 15:45:04
Quote Anchor link
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?
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 15:51:00
Quote Anchor link
Geef eens de volledige structuur van de tabel visitors_stats?
 
Advil Denvil

Advil Denvil

02/08/2014 15:51:45
 
Shamrock Modelbouw

Shamrock Modelbouw

02/08/2014 15:53:07
Quote Anchor link
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...
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 16:01:33
Quote Anchor link
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
Gewijzigd op 02/08/2014 16:01:45 door Ward van der Put
 
Advil Denvil

Advil Denvil

02/08/2014 16:04:07
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 16:06:19
Quote Anchor link
Dan moet je dus een query gebruiken die dit uitvoert:

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

Advil Denvil

02/08/2014 16:08:24
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 16:11:42
Quote Anchor link
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.
 
Advil Denvil

Advil Denvil

02/08/2014 16:38:59
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 16:42:49
Quote Anchor link
Zoek dan eens in je code naar de verschillen...
 
Advil Denvil

Advil Denvil

02/08/2014 16:48:49
Quote Anchor link
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
 
Shamrock Modelbouw

Shamrock Modelbouw

02/08/2014 16:54:20
Quote Anchor link
1054 Unknown column '?' in 'field list''

Waar komt het vraagteken vandaan?
 
Advil Denvil

Advil Denvil

02/08/2014 16:54:40
Quote Anchor link
Weet ik niet.
 
Ward van der Put
Moderator

Ward van der Put

02/08/2014 16:55:25
Quote Anchor link
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.
 
Ivo P

Ivo P

03/08/2014 14:05:23
Quote Anchor link
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
 
Eddy E

Eddy E

04/08/2014 12:05:16
Quote Anchor link
Precies.

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

Dan kan je er alles mee.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.