Parameterized SQL query werkt niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander Vanier

Sander Vanier

16/10/2012 21:45:42
Quote Anchor link
Hallo allemaal,

Ik heb drie verschillende velden die men in kan vullen (of niet!) en vervolgens wordt er op basis van welke velden er wel of niet zijn ingevuld een SQL query opgebouwd die later uitgevoerd wordt. Nu wil ik deze beveiligen tegen SQL injection dmv parameterizing. Ik krijg echter de foutmelding 'Wrong parameter count' en ik begrijp niet waarom. Hieronder eerst mijn code, vervolgens het resultaat van de Echo van de SQL en daaronder weer de Echo van mijn array $params.

Hopelijk weten jullie hier raad mee!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$sql = "SELECT * FROM profiles";

if($bedrijfvariabele != " zoek op bedrijfsnaam.." && $bedrijfvariabele != "") {

$params = array($bedrijfvariabele);
$sql .= " WHERE bedrijfsnaam = ?";

}


if($rubriekvariabele != " zoek op rubriek.." && $rubriekvariabele != "" && $bedrijfvariabele != " zoek op bedrijfsnaam.." && $bedrijfvariabele != "") {

array_push($params, $rubriekvariabele);  
array_push($params, $rubriekvariabele);  
$sql .= " AND (hoofdrubriek = ? OR subrubrieken LIKE '%' + ? + '%')";

}


if($rubriekvariabele != " zoek op rubriek.." && $rubriekvariabele != "" && ($bedrijfvariabele == " zoek op bedrijfsnaam.." || $bedrijfvariabele == "")) {

$params = array($rubriekvariabele, $rubriekvariabele);  
$sql .= " WHERE (hoofdrubriek = ? OR subrubrieken LIKE '%' + ? + '%')";

}


if($plaatsvariabele != " zoek op plaatsnaam.." && $plaatsvariabele != "" && (($bedrijfvariabele != " zoek op bedrijfsnaam.." && $bedrijfvariabele != "") || ($rubriekvariabele != " zoek op rubriek.." &&

$rubriekvariabele != ""))) {

array_push($params, $plaatsvariabele);  
$sql .= " AND plaats = ?";

}


if($plaatsvariabele != " zoek op plaatsnaam.."  && $plaatsvariabele != "" && (($bedrijfvariabele == " zoek op bedrijfsnaam.." || $bedrijfvariabele == "")  && ($rubriekvariabele == " zoek op rubriek.." ||

$rubriekvariabele == ""))) {

$params = array($plaatsvariabele);
$sql .= " WHERE plaats = ?";

}


$sql .= " ORDER BY
(
(case when ID is not null then 1 else 0 end) +
(case when username is not null then 1 else 0 end) +
(case when password is not null then 1 else 0 end) +
(case when voornaam is not null then 1 else 0 end) +
(case when achternaam is not null then 1 else 0 end) +
(case when telefoonnummerP is not null then 1 else 0 end) +
(case when emailP is not null then 1 else 0 end) +
(case when functie is not null then 1 else 0 end) +
(case when bedrijfsnaam is not null then 1 else 0 end) +
(case when bedrijfsslogan is not null then 1 else 0 end) +
(case when bedrijfslogo is not null then 1 else 0 end) +
(case when bedrijfsfoto is not null then 1 else 0 end) +
(case when bedrijfsfoto2 is not null then 1 else 0 end) +
(case when bedrijfsfoto3 is not null then 1 else 0 end) +
(case when bedrijfsfoto4 is not null then 1 else 0 end) +
(case when bedrijfsomschrijving is not null then 1 else 0 end) +
(case when bedrijfsspecialiteiten is not null then 1 else 0 end) +
(case when bedrijfsgeschiedenis is not null then 1 else 0 end) +
(case when openingstijden is not null then 1 else 0 end) +
(case when kvk is not null then 1 else 0 end) +
(case when straatnaam is not null then 1 else 0 end) +
(case when huisnummer is not null then 1 else 0 end) +
(case when postcode is not null then 1 else 0 end) +
(case when plaats is not null then 1 else 0 end) +
(case when nevenvestigingen is not null then 1 else 0 end) +
(case when telefoonnummer is not null then 1 else 0 end) +
(case when fax is not null then 1 else 0 end) +
(case when email is not null then 1 else 0 end) +
(case when website is not null then 1 else 0 end) +
(case when twitter is not null then 1 else 0 end) +
(case when facebook is not null then 1 else 0 end) +
(case when youtube is not null then 1 else 0 end) +
(case when linkedin is not null then 1 else 0 end) +
(case when hoofdrubriek is not null then 1 else 0 end) +
(case when subrubrieken is not null then 1 else 0 end) +
(case when merken is not null then 1 else 0 end) +
(case when diensten is not null then 1 else 0 end) +
(case when productsoorten is not null then 1 else 0 end) +
(case when brancheverenigingen is not null then 1 else 0 end)
) DESC, bedrijfsnaam LIMIT $start_from, 10";  

echo $sql;
print_r($params);

$rs_result = mysql_query($conn, $sql, $params);


ECHO SQL:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM profiles WHERE (hoofdrubriek = ? OR subrubrieken LIKE '%' + ? + '%') ORDER BY ( (case when ID is not null then 1 else 0 end) + (case when username is not null then 1 else 0 end) + (case when password is not null then 1 else 0 end) + (case when voornaam is not null then 1 else 0 end) + (case when achternaam is not null then 1 else 0 end) + (case when telefoonnummerP is not null then 1 else 0 end) + (case when emailP is not null then 1 else 0 end) + (case when functie is not null then 1 else 0 end) + (case when bedrijfsnaam is not null then 1 else 0 end) + (case when bedrijfsslogan is not null then 1 else 0 end) + (case when bedrijfslogo is not null then 1 else 0 end) + (case when bedrijfsfoto is not null then 1 else 0 end) + (case when bedrijfsfoto2 is not null then 1 else 0 end) + (case when bedrijfsfoto3 is not null then 1 else 0 end) + (case when bedrijfsfoto4 is not null then 1 else 0 end) + (case when bedrijfsomschrijving is not null then 1 else 0 end) + (case when bedrijfsspecialiteiten is not null then 1 else 0 end) + (case when bedrijfsgeschiedenis is not null then 1 else 0 end) + (case when openingstijden is not null then 1 else 0 end) + (case when kvk is not null then 1 else 0 end) + (case when straatnaam is not null then 1 else 0 end) + (case when huisnummer is not null then 1 else 0 end) + (case when postcode is not null then 1 else 0 end) + (case when plaats is not null then 1 else 0 end) + (case when nevenvestigingen is not null then 1 else 0 end) + (case when telefoonnummer is not null then 1 else 0 end) + (case when fax is not null then 1 else 0 end) + (case when email is not null then 1 else 0 end) + (case when website is not null then 1 else 0 end) + (case when twitter is not null then 1 else 0 end) + (case when facebook is not null then 1 else 0 end) + (case when youtube is not null then 1 else 0 end) + (case when linkedin is not null then 1 else 0 end) + (case when hoofdrubriek is not null then 1 else 0 end) + (case when subrubrieken is not null then 1 else 0 end) + (case when merken is not null then 1 else 0 end) + (case when diensten is not null then 1 else 0 end) + (case when productsoorten is not null then 1 else 0 end) + (case when brancheverenigingen is not null then 1 else 0 end) ) DESC, bedrijfsnaam LIMIT 0, 10


ECHO ARRAY $params:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Array ( [0] => Aandrijvingen en besturingen [1] => Aandrijvingen en besturingen )
 
PHP hulp

PHP hulp

28/03/2024 13:14:11
 
Ivo Breeden

Ivo Breeden

16/10/2012 22:02:55
Quote Anchor link
Je vergist je: "mysql_query($conn, $sql, $params)" kan niet, dat moet met twee parameters.
En die parameterized query, als je die wilt gebruiken moet je met een prepared statement werken. Dat vereist het gebruik van mysqli of PDO.
Gewijzigd op 17/10/2012 13:19:37 door Ivo Breeden
 



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.