Avatar billede bahn Nybegynder
06. december 2013 - 11:38 Der er 5 kommentarer og
1 løsning

PDO forespørgsel bliver ikke udført som jeg forventer

//udtræk fra spareparts
    $ia = 0;
    $query = "SELECT * ";
    $query .= " FROM spareparts";
    $query .= " WHERE 1";
    foreach ($search as $value)
    {
        $valuebinder = ":value".$ia;
        $query .= " AND varenummer like ".$valuebinder;
        $ia++;
    }
    $query .= " ORDER BY varenummer, gruppe";


    echo "<br>".$query."<br>";
$sth = $dbPDO->prepare($query);

$ib = 0;
foreach ($search as $value)
    {
        $wildcardedvalue = $value;
        $valuebinder = ":value".$ib;
        $sth->bindParam($valuebinder, $wildcardedvalue, PDO::PARAM_STR);
        $part_list .= $valuebinder." = ".$wildcardedvalue."<p>";
        $ib++;
    }

if ($sth->execute())
{
selv udtrækket
}

echo skriver:
SELECT * FROM spareparts WHERE 1 AND varenummer like :value0 AND varenummer like :value1 ORDER BY varenummer, gruppe

part_list skriver:
:value0 = 228
:value1 = 223

men det er kun 223 der kommer frem på resultater og 228 er der også
når jeg kører denne i PMA:
SELECT *
FROM spareparts
WHERE 1
AND varenummer LIKE '228'
AND varenummer LIKE '223'
ORDER BY varenummer, gruppe
LIMIT 0 , 30

kommer begge frem
06. december 2013 - 11:50 #1
Jeg tror ikke du har rækker i databasen hvor varenummer både er 228 og 223.  Prøv at ændre til ....WHERE varenummer like :value0 OR varenummer like :valie1
Avatar billede bahn Nybegynder
06. december 2013 - 12:00 #2
nej den bude nemlig skrive ingen rækker hvis den to begge med.
Men den søger åben bart kun på 223
for det er jo det resultat der kommer frem
06. december 2013 - 12:47 #3
Der smuttede vist et par ord i #2 - jeg fik ikke fat på hvad du mener.  Din query skal ikke give noget resultat hvis hvad?

Men hvordan ser din tabel spareparts ud?  Muligis en struktur som denne:

spareparts
id    varenummer    pris    navn
1          25        12.00        aksel
2        223        25.00        hjul
3        228          5.25        skrue

Hvis du så vil have de varer skrevet ud med varenummer 223 eller 228 er det (som bekendt) SELECT * FROM spareparts WHERE varenummer = 223 OR varenummer = 228.

Hvis på den anden side alle spareparts har to forskellige varenumre, såsom:

spareparts
id  varenummer1 varenummer2 ....
1        25        223
2        228        223
3        228        27

og du vil have de spareparts med varenummer1 = 228 og varenummer2 = 223  siger du SELECT * FROM spareparts WHERE varenummer1 = 228 AND varenummer2 = 223

Så kom igen og forklar hvordan din tabel ser ud og hvad for et resultat du søger.
Avatar billede bahn Nybegynder
06. december 2013 - 13:31 #4
jeg fandt ud af at bindParam skal have &foran
jeg har valgt at bruge bindValue, nu virker det som jeg haved til hensigt
06. december 2013 - 13:47 #5
Jamen det er da prima.  (Så lukker du vel spørgsmålet igen - med eget svar, eftersom det ikke var mine indlæg der ledte til løsning.)
Avatar billede bahn Nybegynder
08. december 2013 - 16:35 #6
jeg fandt ud af at bindParam skal have &foran
jeg har valgt at bruge bindValue, nu virker det som jeg haved til hensigt
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
Computerworld tilbyder specialiserede kurser i database-management

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