私はかなり複雑な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は、次の1つのフィールドに入力すると次のようになります。
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 )