Avatar billede apromis Praktikant
08. november 2010 - 21:39 Der er 19 kommentarer og
1 løsning

Mysqli ?

Hej alle.

Kan nogle løse hvorfor denne kode ikke vil virke ?
    $stmt  = new mysqli('aaa','aaaa','aaaaa','ads');
    $letters = $_GET['letters'];
    $find = "select * from produkter where producent like ? LIMIT 10";
    $stmt = $stmt->prepare($find);
    echo $stmt->error;
    $stmt->bind_params('s', '%'.$letters.'%');
    $stmt->execute();
        while($rows=$stmt->fetch()){
        echo $rows["ID"];
        }

Får denne fejl :
Fatal error: Call to undefined method mysqli_stmt::bind_params() in /home/www/styrkosten.dk/mysqli/list.php on line 9

som er denne er linje :
$stmt->bind_params('s', '%'.$letters.'%');

På forhånd tak :)
Avatar billede erikjacobsen Ekspert
08. november 2010 - 21:59 #1
Hmm, hedder den ikke kun bind_param ?
Avatar billede repox Seniormester
09. november 2010 - 08:50 #2
#1
Jo, det gør den :)
Avatar billede apromis Praktikant
09. november 2010 - 17:45 #3
Der kommer hvert fald en ny fejl :
    $stmt->bind_param('s', '%'.$letters.'%');

Fatal error: Cannot pass parameter 2 by reference in /home/www/styrkosten.dk/mysqli/list.php on line 9


Ved i hvorfor ?
Avatar billede apromis Praktikant
09. november 2010 - 18:57 #4
Jeg er kommet lidt videre :
    $stmt  = new mysqli**********
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select * from produkter where producent like ? LIMIT 10";
    $stmt = $stmt->prepare($find);
    echo $stmt->error;
    $letters = '%' . $letters . '%';
    $stmt->bind_param('s', $letters);
    $stmt->execute();
        while($rows=$stmt->fetch()){
        echo $rows["ID"];
        }

Men den vil ikke udskrive ?
Hvorfor vil den ikke det ?
Avatar billede erikjacobsen Ekspert
09. november 2010 - 21:49 #5
Prøv at kigge på bind_result
Avatar billede apromis Praktikant
09. november 2010 - 22:03 #6
Har virkelig prøvet alt.
Alle eksempler på nettet.

og bind result :
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select ID from produkter where producent like ? LIMIT 10";
    $stmt = $stmt->prepare($find);
    echo $stmt->error;
    $letters = '%' . $letters . '%';
    $stmt->bind_param('s', $letters);
    $stmt->bind_result($id);
    $stmt->execute();
while ($stmt->fetch()) {
    printf("ID: %s\n", $id);
    }

bind_param() giver fejlen.

Forstår det virkelig ikke ?
Er det mig som er dum ?
Avatar billede erikjacobsen Ekspert
09. november 2010 - 23:16 #7
Det sidste skal jeg ikke kunne udtale mig om ;)

Men bind_result skal ske mellem din execute og din fetch.

Derudover kan det jo være, at ingen rækker passer til din søgning.
Avatar billede apromis Praktikant
10. november 2010 - 19:45 #8
Hehe sympatisk sagt.

    $stmt  = new mysqli('aa','aaaa','aaa','aaa');
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select ID from produkter where producent like ? LIMIT 10";
    $stmt = $stmt->prepare($find);
    echo $stmt->error;
    $stmt->execute();
    $stmt->bind_param('i', '%asd%');
while ($stmt->fetch()) {
    printf("ID: %s\n", $id);
    }

Fatal error: Call to a member function execute() on a non-object in /home/www/styrkosten.dk/mysqli/test.php on line 9

som er execute linjen ?
Har byttet om på dem her :S
Avatar billede majbom Novice
11. november 2010 - 11:05 #9
prøv med:

$letters = '%' . $letters . '%';
$stmt->bind_param('s', $letters);
$stmt->execute();
$stmt->bind_result($id);
Avatar billede apromis Praktikant
11. november 2010 - 16:35 #10
Får desværre stadig fejl :
Fatal error: Call to a member function bind_param() on a non-object in /home/www/styrkosten.dk/mysqli/test.php on line 11

som er :
    $stmt->bind_param('s', $letters);

forstår ikke det så svært med like, når det virker med =. Men skal desværre bruge like til min søgning :(
Avatar billede erikjacobsen Ekspert
11. november 2010 - 16:43 #11
Så må du vise os din kode.
Avatar billede apromis Praktikant
11. november 2010 - 17:28 #12
Min kode er :
<?php
    $stmt  = new mysqli('1111','111','11111',1111');
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select ID from produkter where producent like ? LIMIT 10";
    $stmt = $stmt->prepare($find);
    echo $stmt->error;

    $letters = '%' . $letters . '%';
    $stmt->bind_param('s', $letters);
    $stmt->execute();
    $stmt->bind_result($id);
while ($stmt->fetch()) {
    printf("ID: %s\n", $id);
    }


?>

Min database struktur :
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


CREATE TABLE IF NOT EXISTS `produkter` (
  `ID` int(11) NOT NULL auto_increment,
  `producent` text character set utf8 NOT NULL,
  `produktnavn` text character set utf8 NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


Indhold :
ID, produktnavn, producent
1 asdsadasd asdsadsad

Det er det hele :)
Avatar billede erikjacobsen Ekspert
11. november 2010 - 18:18 #13
Det er noget uhensigtsmæssigt at overskrive din "mysqli"-variabel:

    $stmt = $stmt->prepare($find);

Prøv at kalde dem noget forskelligt, som det forhåbentlig er i de eksempler du kigger på, og se så om der kunne være en SQL-fejl.
Avatar billede apromis Praktikant
11. november 2010 - 18:45 #14
Det har jeg prøvet her :
    $db  = new mysqli('1111','111','1111','111');
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select ID from produkter where producent like ? LIMIT 10";
    $stmt = $db->prepare($find);
    echo $stmt->error;

    $letters = '%' . $letters . '%';
    $stmt->bind_param('s', $letters);
    $stmt->execute();
    $stmt->bind_result($id);
while ($stmt->fetch()) {
    printf("ID: %s\n", $id);
    }


Uden held. Min SQL er korrekt, for den virker hvis jeg tager = isteget for like.

Har du flere esser i ærmet ?
Avatar billede apromis Praktikant
11. november 2010 - 18:51 #15
Jeg tror sku det virker nu :).

Svar du og pointsne er dine :)
Avatar billede erikjacobsen Ekspert
11. november 2010 - 18:51 #16
Det er $db, der har en error, ikke $stmt. Prøv det.
Avatar billede erikjacobsen Ekspert
11. november 2010 - 18:59 #17
Nej tak fra mig.
Avatar billede majbom Novice
11. november 2010 - 19:19 #18
springer over - hvordan ser din endelige kode ud så?

bare for at hjælpe andre der har problemer :)
Avatar billede apromis Praktikant
12. november 2010 - 09:07 #19
Jeg takker for hjælpen :)

Min kode endte med nedenstående. Det var en blanding er forkert rækkefølge af koden og forkert valgt tabel :

  $db  = new mysqli('1111','111','1111','111');
    $letters = $_GET['letters'];
    $hvad = "ID,producent";
    $tabel = "produkter";
    $find = "select ID from produkter where producent like ? LIMIT 10";
    $stmt = $db->prepare($find);
    echo $stmt->error;

    $letters = '%' . $letters . '%';
    $stmt->bind_param('s', $letters);
    $stmt->execute();
    $stmt->bind_result($id);
while ($stmt->fetch()) {
    printf("ID: %s\n", $id);
    }
Avatar billede apromis Praktikant
12. november 2010 - 09:07 #20
Og jeg tager pointsne da i ikke vil have :).
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