我有一个非常复杂的if / else语句系统,它最终生成一个SQL。但是,最后,我得到一个'错误的参数计数'消息,我不知道出了什么问题?希望你们能帮忙!我的代码:
$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);
$sql .= " AND (hoofdrubriek = ? OR subrubrieken LIKE '%' + ? + '%')";
}
if($rubriekvariabele != " zoek op rubriek.." && $rubriekvariabele != "" && ($bedrijfvariabele == " zoek op bedrijfsnaam.." || $bedrijfvariabele == "")) {
$params = array($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);
如果我填写一个字段,SQL的ECHO会给出这个:
SELECT * FROM profiles WHERE plaats = ? 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
打印$ params给出了这个:
Array ( [0] => \'s-Gravenmoer )
答案 0 :(得分:1)
在几个地方:
array_push($params, $rubriekvariabele);
$sql .= " AND (hoofdrubriek = ? OR subrubrieken LIKE '%' + ? + '%')";
}
查询中有两个参数,但只将一个值推入params数组。每个参数都必须推送一次。