sp login script maken
$db = new PDO('mssql:host=localhost\snelstart;dbname=SluisWWW','test','*******');
if(isset($_POST["username"]) && isset($_POST["wachtwoord"])) {
$username = $_POST["username"];
$wachtwoord = $_POST["wachtwoord"];
$sql = $db->prepare("EXECUTE spMagInvoeren ?");
$sql->bindparam(1,:Usernaam, $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
$sql->bindparam(2,:Wachtwoord, $wachtwoord, PDO::PARAM_STR|PDO::PARAM_INPUT);
$sql->bindparam(3,:RelatieNummer, $nummer, PDO::PARAM_STR|PDO::PARAM_OUTPUT);
print $nummer
$sql->execute();
}
echo fout
heir -> hier
en er missen interpuncties.
ik mis quotes?
Gewijzigd op 23/03/2012 13:57:11 door - Ariën -
ja sorry voor me nederlands is niet zo best. maar het gaat me om het eerste stuk vooral. die interpuncties bij echo daar gaat het om dit moment niet echt om.
fout en op regel 21 staat dit : ?>
En 5 regels daarvoor?
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
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
USE [SluisWWW]
GO
/****** Object: StoredProcedure [dbo].[spMagInvoeren] Script Date: 03/23/2012 13:54:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: 23 Maart 2012
-- Description: test login
-- =============================================
ALTER PROCEDURE [dbo].[spMagInvoeren]
-- Add the parameters for the stored procedure here
@Usernaam nVarchar(20) ,
@Wachtwoord nvarchar(20),
@IPAdres nvarchar(20),
@Computer nvarchar (20),
@SessieID nvarchar(50),
@PogingenOver integer OUTPUT,
@RelatieNummer integer OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
DECLARE @Success INT
SET NOCOUNT ON;
SET @Success = (SELECT COUNT(*)
FROM contactpersonen
WHERE (username = @Usernaam AND wachtwoord = @Wachtwoord))
IF @Success = 1
BEGIN
SET @RelatieNummer = (SELECT TOP 1 relatie_id FROM [SluisWWW].[dbo].[contactpersonen]
WHERE (username = @Usernaam AND wachtwoord = @Wachtwoord))
END
ELSE SET @RelatieNummer = -1
INSERT INTO [SluisWWW].[dbo].[Logins] (Login,Wachtwoord,RelatieID,IP,Computer,SessieID)
VALUES (@Usernaam,@Wachtwoord,@RelatieNummer,@IPAdres,@Computer,@SessieID)
-- Insert statements for procedure here
END
GO
/****** Object: StoredProcedure [dbo].[spMagInvoeren] Script Date: 03/23/2012 13:54:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: 23 Maart 2012
-- Description: test login
-- =============================================
ALTER PROCEDURE [dbo].[spMagInvoeren]
-- Add the parameters for the stored procedure here
@Usernaam nVarchar(20) ,
@Wachtwoord nvarchar(20),
@IPAdres nvarchar(20),
@Computer nvarchar (20),
@SessieID nvarchar(50),
@PogingenOver integer OUTPUT,
@RelatieNummer integer OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
DECLARE @Success INT
SET NOCOUNT ON;
SET @Success = (SELECT COUNT(*)
FROM contactpersonen
WHERE (username = @Usernaam AND wachtwoord = @Wachtwoord))
IF @Success = 1
BEGIN
SET @RelatieNummer = (SELECT TOP 1 relatie_id FROM [SluisWWW].[dbo].[contactpersonen]
WHERE (username = @Usernaam AND wachtwoord = @Wachtwoord))
END
ELSE SET @RelatieNummer = -1
INSERT INTO [SluisWWW].[dbo].[Logins] (Login,Wachtwoord,RelatieID,IP,Computer,SessieID)
VALUES (@Usernaam,@Wachtwoord,@RelatieNummer,@IPAdres,@Computer,@SessieID)
-- Insert statements for procedure here
END
Gewijzigd op 23/03/2012 15:46:12 door gerhard timmerman
In de eerste plaats definieer je maar een parameter (1 ?), maar plaats je er drie. Twee voor input, een voor output. Nu moet ik eerlijk zeggen dat ik nog nooit op deze manier een stored procedure heb aangeroepen, maar ik heb het idee dat je tenminste twee parameters (2x ?) zou moeten declareren.
Daarnaast, in de parameter bindings geef je 4 waardes mee:
Volgens mij moeten dat er maar drie zijn. Je geeft namelijk een parameter nummer mee (1) en een parameter naam (:username). Het is of het nummer, of de naam. En als je de naam meegeeft, dan is het een string, dus dat moet dan tussen quotes.
Code (php)
1
2
3
2
3
$sql = $db->prepare("EXECUTE spMagInvoeren ?");
$sql->bindparam(@Usernaam, $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
$sql->bindparam(@Wachtwoord, $wachtwoord, PDO::PARAM_STR|PDO::PARAM_INPUT);
$sql->bindparam(@Usernaam, $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
$sql->bindparam(@Wachtwoord, $wachtwoord, PDO::PARAM_STR|PDO::PARAM_INPUT);
Gewijzigd op 23/03/2012 16:07:13 door gerhard timmerman
$db = new PDO('mssql:host=localhost\snelstart;
moet dat niet
$db = new PDO('mysql:host=localhost\snelstart;
pepijn, google dit soort dingen eerst als je het niet weet, mssql is een sql server ontwikkelt door microsoft
Toevoeging op 23/03/2012 17:02:21:
weet ik dat ook weer
Gerhard timmerman op 23/03/2012 16:06:52:
Nee. Ofwel je gebruikt een integer om de parameter aan te duiden, of de naam, maar dan is het een string:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
//of met een integer:
$sql->bindparam(1, $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
//of als string:
$sql->bindparam(':username', $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
?>
//of met een integer:
$sql->bindparam(1, $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
//of als string:
$sql->bindparam(':username', $username, PDO::PARAM_STR|PDO::PARAM_INPUT);
?>
Alleen in dit geval kan de laatste manier denk ik niet, want je hebt in je query geen parameter bij naam opgenomen, dus kan je hem ook niet op naam binden.
Blijft nog staan dat je maar 1 vraagteken hebt en twee parameters wil binden. Dat gaat volgens mij ook niet werken.