Avatar billede hanibald Mester
20. oktober 2015 - 17:46 Der er 7 kommentarer og
1 løsning

php prepared select

Nedenstående kode giver denne fejlmeddelelse knyttet til 'while'-linien:
Fatal error: Call to a member function fetch_assoc() on boolean in ..



$stm_niveau01 ="";
if (isset ($_POST['submit'])) //start POST
{
$stm_niveau01 = htmlentities (trim($_POST['stm_niveau01']), ENT_QUOTES, "utf-8");
         
$sql = "SELECT * FROM stammenu WHERE stm_niveau01 = ?";
$query = $db_link->prepare($sql);
$query->bind_param('s',$stm_niveau01);
$query->execute();
$query->store_result();
$antal = $query->num_rows;           
$result = $query->get_result();   

if ($antal > 0)
{
...
while ($row = $result->fetch_assoc())
{
echo "<tr>";
echo "<td>$row[stm_id]</td>";
echo "<td>$row[stm_niveau01]</td>";
echo "<td>$row[stm_niveau02]</td>";
echo "<td>$row[stm_niveau03]</td>";
echo "<td>$row[stm_niveau04]</td>";
echo "</tr>";
...



$stm_niveau01 modtager den korrekte tekststreng fra $_POST
$antal viser det korrekte antal selekterede records.
Jeg får denne print_r på $query:
mysqli_stmt Object ( [affected_rows] => 6 [insert_id] => 0 [num_rows] => 6 [param_count] => 1 [field_count] => 5 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 1 )
Avatar billede erikjacobsen Ekspert
20. oktober 2015 - 18:09 #1
Bruger du variablen $result yil noget længere nede i din while-løkke?
Avatar billede hanibald Mester
20. oktober 2015 - 20:32 #2
Nej

Min while-løkke er ikke længere end der er vist. Jeg skulle også have vist næste kodelinie '}'.
Avatar billede erikjacobsen Ekspert
20. oktober 2015 - 20:54 #3
Og lige før while-løkken har du også "..." - sker der noget spændende der?
Avatar billede hanibald Mester
01. november 2015 - 20:36 #4
Erik!

Jeg har fravalgt, at arbejde videre med prepared statements efter get-metoden. Binding-metoden synes mere udbredt - og virker fint for mig (selvom den har en svaghed eller to i.f.t. binding).

Har du et svar a.h.t. point.
Avatar billede erikjacobsen Ekspert
01. november 2015 - 22:30 #5
Jeg kiggede faktisk lidt videre på det, og problemet er vist at man ikke skal spørge på antal rækker:  $antal = $query->num_rows; 

...og det giver vist den fejlbesked, som du også se.

Rækkerne er med standard opsætning slet ikke hentet ind, før du har været igennem while løkken med fetch_assoc (det er normalt også mere effektivt for større resultater). Der kan du så tælle antal rækker undervejs.
Avatar billede hanibald Mester
05. november 2015 - 21:59 #6
Tak for at du kiggede dybere.
Jeg har slet ikke været så dybt nede i PHP. Min begrundelse for 'get'-metoden var, at man kan anvende 'select *'. Jeg har dog kun set en enkelt omtale af den og mange af 'bind'-metoden.

Jeg vil nu koncentrere mig om at finpudse min fortrolighed med 'bind'-metoden.

Svar udbedes.
Avatar billede erikjacobsen Ekspert
05. november 2015 - 22:02 #7
Det var ikke så godt. Jeg samler slet ikke på point, tak. Svar selv, og accepter dit eget svar.
Avatar billede hanibald Mester
06. november 2015 - 11:49 #8
Ego
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester