sqlsrv_fetch_array() expects parameter 2 to be long,
Ik heb onderstaand script omgezet van mysql naar sqlsrv, hier gaat het fout, het script in mysql werkte!
Het script is voor het aanmaken van een gebruiker en controleert of er een bestaande gebruiker is.
De volgende foutmelding krijg ik: sqlsrv_fetch_array() expects parameter 2 to be long, string given in .... on line 13.
line 13 is onstaand gedeelte:
hieronder het sql gedeelte van het script:
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
error_reporting(E_ALL & ~E_NOTICE);
session_start();
include'../connectdb.php';
if(isset($_GET['add'])) {
echo $_POST['gebruikersnaam'];
if (isset($_POST['voegtoe'])) {
if($_POST['gebruikersnaam'] && $_POST['wachtwoord'] && $_POST['hwachtwoord']){
$usernamecheck = "SELECT * FROM Customer WHERE EMail='$_POST[gebruikersnaam]'";
$stmt = sqlsrv_query( $dbhandle, $usernamecheck );
$userchecker = sqlsrv_fetch_array($stmt, sqlsrv_fetch_assoc);
if ($_POST['gebruikersnaam'] != $userchecker['gebruikersnaam']){
if ($_POST['wachtwoord']==$_POST['hwachtwoord']){
$passwordHash = sha1 ($_POST['wachtwoord']);
$query = "INSERT INTO Customer (CustomerID, CustomerNo, CustomerName, CurrencyID, EMail, Password, Rechten)
VALUES((SELECT NextCustomerID FROM CustCtl), (SELECT NextCustomerNo FROM CustCtl), '$_POST[naam]',
1, '$_POST[gebruikersnaam]', '$passwordHash', 2)";
if (!($result = @ sqlsrv_query($query, $dbhandle))) {
die( print_r( sqlsrv_errors(), true) );
}
}
else {
echo "De opgegeven wachtwoorden komen niet overeen";
}
}
else{
echo "Het opgegeven gebruikersnaam bestaat al!";
}
}
else {
echo "Vul alle velden in!";
}
?>
error_reporting(E_ALL & ~E_NOTICE);
session_start();
include'../connectdb.php';
if(isset($_GET['add'])) {
echo $_POST['gebruikersnaam'];
if (isset($_POST['voegtoe'])) {
if($_POST['gebruikersnaam'] && $_POST['wachtwoord'] && $_POST['hwachtwoord']){
$usernamecheck = "SELECT * FROM Customer WHERE EMail='$_POST[gebruikersnaam]'";
$stmt = sqlsrv_query( $dbhandle, $usernamecheck );
$userchecker = sqlsrv_fetch_array($stmt, sqlsrv_fetch_assoc);
if ($_POST['gebruikersnaam'] != $userchecker['gebruikersnaam']){
if ($_POST['wachtwoord']==$_POST['hwachtwoord']){
$passwordHash = sha1 ($_POST['wachtwoord']);
$query = "INSERT INTO Customer (CustomerID, CustomerNo, CustomerName, CurrencyID, EMail, Password, Rechten)
VALUES((SELECT NextCustomerID FROM CustCtl), (SELECT NextCustomerNo FROM CustCtl), '$_POST[naam]',
1, '$_POST[gebruikersnaam]', '$passwordHash', 2)";
if (!($result = @ sqlsrv_query($query, $dbhandle))) {
die( print_r( sqlsrv_errors(), true) );
}
}
else {
echo "De opgegeven wachtwoorden komen niet overeen";
}
}
else{
echo "Het opgegeven gebruikersnaam bestaat al!";
}
}
else {
echo "Vul alle velden in!";
}
?>
Alvast bedankt voor de oplossing :)
Gewijzigd op 02/01/2015 15:06:52 door Dennis B
Wijzig sqlsrv_fetch_assoc eens naar SQLSRV_FETCH_ASSOC op regel 13
Code (php)
1
2
2
[email protected] ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 => -14 [2] => An invalid parameter was passed to sqlsrv_query. [message] => An invalid parameter was passed to sqlsrv_query. ) )
tussen regel 22 en 23?
Je zou daar zeker prepared statements moeten gebruiken. zo is het echt onveilig om direct $_POST variabelen in je database te knallen.
[email protected] INTO Customer (CustomerID, CustomerNo, CustomerName, CurrencyID, EMail, Password, Rechten) VALUES((SELECT NextCustomerID FROM CustCtl), (SELECT NextCustomerNo FROM CustCtl), 'd', 1, '[email protected]', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', 2)Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14
Toevoeging op 02/01/2015 16:12:48:
Waarom staat er een @ voor ?
Toevoeging op 02/01/2015 16:18:21:
Maar het werkt, nadat ik de parameters omgedraait had. Dat daar de fouten al in kunnen zitten... Uren opgezocht. Maar het werkt. Hartstikke bedankt!!!
Toevoeging op 02/01/2015 16:21:44:
Ben er net achtergekomen, dat ie nog steeds niet goed werkt. Hij insert wel. Alleen als ik nog een keer hetzelfde mail adres invoer, krijg ik geen error maar wordt de insert gewoon uitgevoerd.
Dit is dus nog niet goed, waar kan dit aan liggen?
Nogmaals alvast bedankt!
die @ is om foutmeldingen te onderdrukken. Lijkt me niet handig..
Haal die @ maar weg
Toevoeging op 02/01/2015 16:28:02:
laat maar, probleem al gevonden. Ik had mijn nieuwe sql code vervangen, en vergeten de database aan te passen
if ($_POST['gebruikersnaam'] != $userchecker['gebruikersnaam']){
moest zijn if ($_POST['gebruikersnaam'] != $userchecker['EMail']){
Toevoeging op 02/01/2015 16:28:24:
Maar alsnog hartstikke bedankt!
succes er mee