Avatar billede DonDaase Novice
13. oktober 2015 - 20:07 Der er 4 kommentarer og
1 løsning

PHP IF statement i MySQL

Hej Eksperter.

Jeg forsøger at formulere et MySQL statement i PHP. Som en del af det MySQL skal der være en PHP "IF" som skal tilføje lidt ekstra MySQL hvis en betingelse er opfyldt.

(div)
function konti_ReadAll($konto, $fradato, $tildato, $sogeord) {
    $ar = array();
    $con = Con2DB();
    $query =     "SELECT pdato, ptekst, pbelb, pkontonr, plbnr
                FROM poster
                WHERE '$fradato' <= pdato
                AND '$tildato' >= pdato
                AND pkontonr = '$konto'";
   
    IF ($sogeord <> '') {
    $query.= " AND CHARINDEX(" . $sogeord . ", ptekst) ";
    };
   
    $query.= " ORDER BY pdato";
   
    $result = mysqli_query($con, $query);
   
    $tllr = 0;
    while ($poster = mysqli_fetch_assoc($result)) {
        $tllr = $tllr + $poster['pbelb'];
        $ar[] = array($poster['pdato'], $poster['ptekst'], $poster['pbelb'], $tllr, $poster['plbnr'], $poster['pkontonr']);
    }

    mysqli_close($con);
    return $ar;
}
(/div)

Det virker fint så længe IF sætningen ikke bliver TRUE. Dvs. så længe $sogeord er blank så kører det.

Hvis $sogeord er udfyldt får jeg en fejl der hedder:
(div)
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /volume1/web/ny.php on line 32
(/div)

Til info er linje 32 der hvor der står:
(div)
while ($poster = mysqli_fetch_assoc($result)) {
(/div)

Hvad gør jeg galt?
Avatar billede DonDaase Novice
13. oktober 2015 - 20:10 #1
Glem alt hvor der står (div) og (/div). Et forsøg på at gøre det mere overskueligt :-)
Avatar billede olsensweb.dk Ekspert
13. oktober 2015 - 20:39 #2
hvordan ser din CHARINDEX function ud ??
ref http://stackoverflow.com/questions/9953114/split-comma-delimited-string-function-db-charindex-does-not-exist
citat
MySQL doesn't have a built-in CHARINDEX() function. LOCATE() would be the MySQL equivalent.
..
MySQL does have a similar function: InStr or for the same syntax Locate.
/citat
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_instr
http://www.w3resource.com/mysql/string-functions/mysql-instr-function.php


IF ($sogeord <> '') {
vil jeg skrive som
if ($sogeord != '') {

er ikke sikker på den æder stort if


#1
du overså
ref http://www.eksperten.dk/guide/1325
Husk at erstatte alle ( med [ og alle ) med ]

men ellers var meningen god nok
Avatar billede DonDaase Novice
13. oktober 2015 - 20:58 #3
Hey.

Lavede dine ændringer samt tilføjede ' ' uden om første felt i "LOCATE"en så virkede det.

Den kom til at se således ud.

Tak for god hjælp - også med tags :-)


if($sogeord != '') {
  $query.= " AND LOCATE('" . $sogeord . "' ,ptekst)>0 ";
};


Laver du et svar?
Avatar billede olsensweb.dk Ekspert
13. oktober 2015 - 21:18 #4
får du her

function konti_ReadAll($konto, $fradato, $tildato, $sogeord) {
havde jeg nok kaldt noget ala
function poster_ReadAll($konto, $fradato, $tildato, $sogeord) {

da functions prefixet fortæller mig noget om hvilke tabel jeg arbejder på/ud fra
men det har ingen praktisk betydning, bare functions navne er logiske og siger dig noget.
Avatar billede DonDaase Novice
13. oktober 2015 - 21:22 #5
Jeg ved det. Det er en kopi fra en anden side jeg bare ikke har fået ændre navnet på endnu - men tak for rådet :-)
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

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