insert multiple foreign keys in dezelfde tabel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
-- phpMyAdmin SQL Dump
-- version 3.3.10deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 15, 2011 at 10:39 AM
-- Server version: 5.1.54
-- PHP Version: 5.3.5-1ubuntu7.2
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `adressen`
--
CREATE TABLE IF NOT EXISTS `adressen` (
`adres_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`gebruiker_id` int(10) unsigned NOT NULL,
`plaats` varchar(40) NOT NULL,
`country_id` int(11) NOT NULL,
PRIMARY KEY (`adres_id`),
KEY `gebruiker_id` (`gebruiker_id`),
KEY `country_id` (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `adressen`
--
INSERT INTO `adressen` (`adres_id`, `gebruiker_id`, `plaats`, `country_id`) VALUES
(1, 1, 'Amsterdam', 5);
-- --------------------------------------------------------
--
-- Table structure for table `country`
--
CREATE TABLE IF NOT EXISTS `country` (
`country_id` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(80) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`country_id`),
KEY `country_id` (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=6 ;
--
-- Dumping data for table `country`
--
INSERT INTO `country` (`country_id`, `country`) VALUES
(1, 'Belgium'),
(2, 'France'),
(3, 'Germany'),
(4, 'Austria'),
(5, 'Netherlands');
-- --------------------------------------------------------
--
-- Table structure for table `gebruikers`
--
CREATE TABLE IF NOT EXISTS `gebruikers` (
`gebruiker_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`naam` varchar(20) NOT NULL,
PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `gebruikers`
--
INSERT INTO `gebruikers` (`gebruiker_id`, `naam`) VALUES
(1, 'Jan');
--
-- Constraints for dumped tables
--
--
-- Constraints for table `adressen`
--
ALTER TABLE `adressen`
ADD CONSTRAINT `adressen_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `adressen_fk` FOREIGN KEY (`gebruiker_id`) REFERENCES `gebruikers` (`gebruiker_id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- version 3.3.10deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 15, 2011 at 10:39 AM
-- Server version: 5.1.54
-- PHP Version: 5.3.5-1ubuntu7.2
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `test`
--
-- --------------------------------------------------------
--
-- Table structure for table `adressen`
--
CREATE TABLE IF NOT EXISTS `adressen` (
`adres_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`gebruiker_id` int(10) unsigned NOT NULL,
`plaats` varchar(40) NOT NULL,
`country_id` int(11) NOT NULL,
PRIMARY KEY (`adres_id`),
KEY `gebruiker_id` (`gebruiker_id`),
KEY `country_id` (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `adressen`
--
INSERT INTO `adressen` (`adres_id`, `gebruiker_id`, `plaats`, `country_id`) VALUES
(1, 1, 'Amsterdam', 5);
-- --------------------------------------------------------
--
-- Table structure for table `country`
--
CREATE TABLE IF NOT EXISTS `country` (
`country_id` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(80) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`country_id`),
KEY `country_id` (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=6 ;
--
-- Dumping data for table `country`
--
INSERT INTO `country` (`country_id`, `country`) VALUES
(1, 'Belgium'),
(2, 'France'),
(3, 'Germany'),
(4, 'Austria'),
(5, 'Netherlands');
-- --------------------------------------------------------
--
-- Table structure for table `gebruikers`
--
CREATE TABLE IF NOT EXISTS `gebruikers` (
`gebruiker_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`naam` varchar(20) NOT NULL,
PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `gebruikers`
--
INSERT INTO `gebruikers` (`gebruiker_id`, `naam`) VALUES
(1, 'Jan');
--
-- Constraints for dumped tables
--
--
-- Constraints for table `adressen`
--
ALTER TABLE `adressen`
ADD CONSTRAINT `adressen_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `adressen_fk` FOREIGN KEY (`gebruiker_id`) REFERENCES `gebruikers` (`gebruiker_id`) ON DELETE CASCADE ON UPDATE CASCADE;
Zoals je ziet heb ik in het tabel adressen 2 foreignkeys, ik kan middels onderstaande code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
// verbind met de database
$objMysqli = new mysqli( 'host', 'user', 'pass', 'db' );
// start transactie
$objMysqli->query( "START TRANSACTION" );
// voeg de gebruiker toe
if ( $objMysqli->query( "INSERT INTO gebruikers (naam) VALUES ('Jan')" ) )
{
// de query is gelukt, voeg het adres toe
$strQuery = sprintf(
"INSERT INTO adressen (gebruiker_id, plaats) VALUES (%d, 'Amsterdam')",
$objMysqli->insert_id
);
if ( $objMysqli->query( $strQuery ) )
{
// beide queries zijn gelukt, voltooi de transactie
$objMysqli->query( "COMMIT" );
echo 'De gebruiker is toegevoegd';
}
else
{
// de adresquery is mislukt, maak de transactie ongedaan
$objMysqli->query( "ROLLBACK" );
echo 'De gebruiker is niet toegevoegd, het adres kon niet worden opgeslagen';
}
}
else
{
// de adresquery is mislukt, beëindig de transactie
echo 'De gebruiker is niet toegevoegd aan de tabel gebruikers';
$objMysqli->query( "ROLLBACK" );
}
// sluit de verbinding
$objMysqli->close();
?>
// verbind met de database
$objMysqli = new mysqli( 'host', 'user', 'pass', 'db' );
// start transactie
$objMysqli->query( "START TRANSACTION" );
// voeg de gebruiker toe
if ( $objMysqli->query( "INSERT INTO gebruikers (naam) VALUES ('Jan')" ) )
{
// de query is gelukt, voeg het adres toe
$strQuery = sprintf(
"INSERT INTO adressen (gebruiker_id, plaats) VALUES (%d, 'Amsterdam')",
$objMysqli->insert_id
);
if ( $objMysqli->query( $strQuery ) )
{
// beide queries zijn gelukt, voltooi de transactie
$objMysqli->query( "COMMIT" );
echo 'De gebruiker is toegevoegd';
}
else
{
// de adresquery is mislukt, maak de transactie ongedaan
$objMysqli->query( "ROLLBACK" );
echo 'De gebruiker is niet toegevoegd, het adres kon niet worden opgeslagen';
}
}
else
{
// de adresquery is mislukt, beëindig de transactie
echo 'De gebruiker is niet toegevoegd aan de tabel gebruikers';
$objMysqli->query( "ROLLBACK" );
}
// sluit de verbinding
$objMysqli->close();
?>
de gebruikers id toevoegen maar ik zou niet weten hoe ik de gegevens van de tabel country hieraan kan toevoegen zodat de country id ook op de juiste manier wordt toegevoegd?
voor country werk ik met een dropdownlist.
Toevoeging op 15/08/2011 12:25:36:
heeft iemand een idee?
Toevoeging op 15/08/2011 22:27:46:
of een link naar een tutorial/howto?
Er zijn nog geen reacties op dit bericht.