Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk
Medlem

Dynamisk bind-param Php

Behöver lite hjälp med att merga arrays i Bind-Param och undrar om där är någon vänlig själ där ute som kan hjälpa mig.

Allt funkar bra när man enbart söker på rubrik men när man jag ska börja söka på rubrik och county id får jag jag detta meddelandet.

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in......

Tack på förhand.

$headline = $_GET['hl']; $county = $_GET['ca']; $categories = '$_GET['co']'; $query = 'SELECT COUNT(id) FROM main_table'; $queryCond = array(); $stringtype = array(); $variable = array(); if (!empty($headline)) { $queryCond[] = "headline LIKE CONCAT ('%', ? , '%')"; array_push($stringtype, 's'); array_push($variable, $headline); } if (!empty($county)) { $queryCond[] = "county_id = ?"; array_push($stringtype, 'i'); array_push($variable, $county); } if (!empty($categories)) { $queryCond[] = "categories_id = ?"; array_push($stringtype, 'i'); array_push($variable, $categories); } if (count($queryCond)) { $query .= ' WHERE ' . implode(' AND ', $queryCond); } //var_dump($query); $stmt = $mysqli->prepare($query); $variable = array_merge($stringtype, $variable); //var_dump($params); $refs = array(); //var_dump($refs); foreach($variable as $key => $value) $refs[$key] = &$variable[$key]; call_user_func_array(array($stmt, "bind_param"), $refs);

Visa signatur

Chassie: Corsair Graphite 600T - Mobo: Asus P8P67 - CPU: Intel i7 2600K - CPUkylare: Corsair Hydro H80 - RAM-minne: 12 Gb Corsair Dominator - GPU: EVGA 680GTX FTW+ 4GB - PSU: Corsair AX 850 GOLD - HDD: Intel 330 Series 2.5 OS: W7 Pro - Keyboard: Logitech Illuminated

Permalänk
Medlem

Osäker, men bör du inte lägga in värden i $queryCond med array_push()? Nu känns det som att värdena skrivs över med det senaste hela tiden. Känner inte igen syntaxen "$x[] = y;".

Skickades från m.sweclockers.com

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk
Medlem
Skrivet av RiJo:

Känner inte igen syntaxen "$x[] = y;".

Append to array.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Legendarisk
Skrivet av Hamno:

Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in......

Typerna måste ges som en sträng till bind_param's första argument; dina är en array så när du anropar funktionen ser det ut som ("s", "i", "i", "foo", 0, 0) istället för ("sii", "foo", 0, 0). Slå samman $stringtype eller bygg den som en sträng direkt.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Tunnelsork:

Typerna måste ges som en sträng till bind_param's första argument; dina är en array så när du anropar funktionen ser det ut som ("s", "i", "i", "foo", 0, 0) istället för ("sii", "foo", 0, 0). Slå samman $stringtype eller bygg den som en sträng direkt.

Har försökt att få den till se ut så men har kört lite fast..

Visa signatur

Chassie: Corsair Graphite 600T - Mobo: Asus P8P67 - CPU: Intel i7 2600K - CPUkylare: Corsair Hydro H80 - RAM-minne: 12 Gb Corsair Dominator - GPU: EVGA 680GTX FTW+ 4GB - PSU: Corsair AX 850 GOLD - HDD: Intel 330 Series 2.5 OS: W7 Pro - Keyboard: Logitech Illuminated

Permalänk
Legendarisk
Skrivet av Hamno:

Har försökt att få den till se ut så men har kört lite fast..

Ditt mål är att få en array som innehåller ["sii", &"foo", &0, &0]. Lättast vore att bygga den i det formatet från början:

// Den första parametern/elementet är typsträngen. // Index >= 1 blir dina värden. $bindParamArgs = [""]; if(!empty($headline)) { $bindParamArgs[0] .= "s"; // Ny typ sist i strängen. $bindParamArgs[] = &$headline; // Ny data som sista parameter/element. } if(!empty($county)) { $bindParamArgs[0] .= "i"; $bindParamArgs[] = &$county; } if(!empty($categories)) { $bindParamArgs[0] .= "i"; $bindParamArgs[] = &$categories; } var_dump($bindParamArgs); call_user_func_array(array($stmt, "bind_param"), $bindParamArgs);

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Tunnelsork:

Ditt mål är att få en array som innehåller ["sii", &"foo", &0, &0]. Lättast vore att bygga den i det formatet från början:

// Den första parametern/elementet är typsträngen. // Index >= 1 blir dina värden. $bindParamArgs = [""]; if(!empty($headline)) { $bindParamArgs[0] .= "s"; // Ny typ sist i strängen. $bindParamArgs[] = &$headline; // Ny data som sista parameter/element. } if(!empty($county)) { $bindParamArgs[0] .= "i"; $bindParamArgs[] = &$county; } if(!empty($categories)) { $bindParamArgs[0] .= "i"; $bindParamArgs[] = &$categories; } var_dump($bindParamArgs); call_user_func_array(array($stmt, "bind_param"), $bindParamArgs);

Tack så mycket för hjälpen Tunnelsork

Visa signatur

Chassie: Corsair Graphite 600T - Mobo: Asus P8P67 - CPU: Intel i7 2600K - CPUkylare: Corsair Hydro H80 - RAM-minne: 12 Gb Corsair Dominator - GPU: EVGA 680GTX FTW+ 4GB - PSU: Corsair AX 850 GOLD - HDD: Intel 330 Series 2.5 OS: W7 Pro - Keyboard: Logitech Illuminated

Permalänk
Medlem

Sen har vi även syntax error på rad 3. Smugit sig in en ' före $_GET