1

私はかなり複雑な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 )
4

1 に答える 1

1

いくつかの場所で:

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

}

クエリには 2 つのパラメーターがありますが、1 つの値のみを params 配列にプッシュします。パラメータごとに 1 つのプッシュが必要です。

于 2012-10-16T19:09:24.000 に答える