Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

MYSQL variabele column naam

Pagina: 1
Acties:

  • tj.jackel
  • Registratie: Augustus 2014
  • Laatst online: 28-09 06:30
Hallo,

Voor mijn website moet de php code een kolom toevoegen aan een tabel. De naam van de kolom moet een variabele zijn en een integer (er wordt een nummer gebruikt als ID).

Hoe moet ik dit implementeren? Ik kom er niet uit hoe ik een variabele integer als kolom naam kan gebruiken in de query.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
foreach($rows as $row): $IDtemp = htmlentities($row['ID'], ENT_QUOTES, 'UTF-8'); endforeach;
//Add new challenge to completedchallenges table.
                $query3 = "
            ALTER TABLE completedchallenges
            ADD `'$IDtemp'` INT(255)
        ";


        try
        {

            $stmt = $db->prepare($query3);
            $result = $stmt->execute();
        }
        
            catch(PDOException $ex)
    {
        // Note: On a production website, you should not output $ex->getMessage().
        // It may provide an attacker with helpful information about your code. 
        
    }


Alvast bedankt

[ Voor 1% gewijzigd door RobIII op 10-11-2014 21:24 . Reden: Code tags toegevoegd ]


  • tj.jackel
  • Registratie: Augustus 2014
  • Laatst online: 28-09 06:30
Antwoord gevonden :
PHP:
1
2
3
$query3 = "
ALTER TABLE completedchallenges
ADD `".$IDtemp."` INT(255)

[ Voor 20% gewijzigd door RobIII op 10-11-2014 21:24 . Reden: Code tags toegevoegd ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-11 22:59

Janoz

Moderator Devschuur®

!litemod

STOP

Dit is NIET de oplossing. Als je applicatie ALTER TABLE commando's nodig heeft is je design NIET juist. Ik zou dit even naar de prullenbak sturen en even opnieuw over je datamodel na gaan denken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^ Wat hij zegt.

Verder: als je code post, gebruik dan code tags a.u.b.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 20-10 20:31
Zonder enige toelichting roepen dat het echt niet kan is natuurlijk een beetje makkelijk. Aan de context te zien lijkt het inderdaad handiger om een extra tabel te gebruiken. Als je een pivot o.i.d. nodig hebt kun je hier online wel voorbeelden over vinden (met name met CONCAT en GROUP_CONCAT functies). MariaDB, een drop-in fork van MySQL, kent ook dynamic columns zonder DDL queries: https://mariadb.com/kb/en...on/nosql/dynamic-columns/

Ik kan wel een stevige case bedenken om toch DDL queries te moeten gebruiken (denk bijvoorbeeld ook aan Entity-Attribute-Value modellen in medische toepassingen en omvangrijke sparse grids), maar het is zeker iets om heel bewust over na te denken, al is het alleen maar te doen om veiligheid. Je bent immers effectief alle voordelen van het DBMS aan het omzeilen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-11 22:59

Janoz

Moderator Devschuur®

!litemod

Ik weet 100% zeker dat de topicstarter de foute oplossing aan het kiezen is.

1. Iemand die dergelijke ingewikkelde structuren aan het ontwikkelen is waarbij er daadwerkelijk een usecase is voor het toepassen van het database in database antipattern zal geen moeite hebben met het in elkaar draaien van een alter table query.
2. In dat soort gevallen zal bij de kolom geen sprake zijn van een oplopend index nummertje
3. Dit is waarschijnlijk een vervolg topic op het probleem dat de topicstarter in "[MySQL] Een record aan meerdere andere records koppelen" aan het oplossen was.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • cannibal
  • Registratie: Maart 2001
  • Laatst online: 02:52
Dit was er inderdaad een die meteen alle alarmbellen liet rinkelen.

Janoz zijn punt 1 hierboven maakt dat gewoon meteen duidelijk.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
De gebruikelijke reden waarom iemand zoiets probeert is omdat ze geen JOIN kunnen schrijven, ja. En de link van Janoz lijkt dat weer te bevestigen. TS lijkt de join van user kolom en opdrachtkolom niet te kunnen schrijven.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1