PHP + MySQLi, DATE_ADD INTERVAL probléma.

PHP + MySQLi, DATE_ADD INTERVAL probléma.
2020-07-03T15:19:09+02:00
2020-07-03T18:05:51+02:00
2022-10-15T21:16:17+02:00
Herfe
Sziasztok!

Le szeretném kérdezni az aktív előfizetéssel rendelkező felhasználókat.

A gond az, hogyha az INTERVAL résznél az adatbázisból veszem a következő értéket akkor kiakad. Az értékek a következőek lehetnek:
DAY
MONTH
YEAR

Így működik:

$query["sql"] = "select $users_tbl.id from "; $query["sql"].="$database.$orders_tbl, $database.$users_tbl, $database.$item_tbl "; $query["sql"].="where $orders_tbl.user_id=$users_tbl.id and "; $query["sql"].="$orders_tbl.item_id=$item_tbl.id and "; $query["sql"].="DATE_ADD(date_format($orders_tbl.date_time,\"%Y-%m-%d\"), INTERVAL $item_tbl.quantity MONTH)>=CURDATE()"; $result = @mysqli_query($connect_mysqli,$query["sql"]); $row = $result->fetch_assoc();

Így is működik:

$subscr_type="MONTH"; $query["sql"] = "select $users_tbl.id from "; $query["sql"].="$database.$orders_tbl, $database.$users_tbl, $database.$item_tbl "; $query["sql"].="where $orders_tbl.user_id=$users_tbl.id and "; $query["sql"].="$orders_tbl.item_id=$item_tbl.id and "; $query["sql"].="DATE_ADD(date_format($orders_tbl.date_time,\"%Y-%m-%d\"), INTERVAL $item_tbl.subscr_quantity $subscr_type)>=CURDATE()"; $result = @mysqli_query($connect_mysqli,$query["sql"]); $row = $result->fetch_assoc();


A gond az, hogy így nem működik, pedig ez lenne a cél. Valamiért ha a MONTH, DAY stb. értéket az adatbázisból veszem, akkor kiakad:

$query["sql"] = "select $users_tbl.id from "; $query["sql"].="$database.$orders_tbl, $database.$users_tbl, $database.$item_tbl "; $query["sql"].="where $orders_tbl.user_id=$users_tbl.id and "; $query["sql"].="$orders_tbl.item_id=$item_tbl.id and "; $query["sql"].="DATE_ADD(date_format($orders_tbl.date_time,\"%Y-%m-%d\"), INTERVAL $item_tbl.subscr_quantity $item_tbl.subscr_type)>=CURDATE()"; $result = @mysqli_query($connect_mysqli,$query["sql"]); $row = $result->fetch_assoc();

Egyszerűen nem értem miért, már próbálkoztam több megoldással, idézőjel köze tenni stb., de semmi eredménye.

Köszi a válaszokat.
Mutasd a teljes hozzászólást!
Vagyis a `mysqli_query` úgy jelezte a hibát, hogy `false` értéket adott vissza, abból persze nem lehet fetch-csel olvasni.
Alapvetően az a gond, hogy kulcsszavak helyett nem lehet mezőneveket használni. Esetleg ilyesmit lehetne logikázni:

WHERE ... AND ((field='MONTH' AND ...hónapra vonatkozó feltétel...) OR (field='YEAR' AND ...évre vonatkozó feltétel...) )
Mutasd a teljes hozzászólást!

  • Azon kívül, hogy kiakad, van hibaüzenet is?
    Mutasd a teljes hozzászólást!
  • Igen, php-ben ez a hibaüzenet:
    "Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in...."


    Hogyha egyenesen phpmyadmin-ba beírom a lekérdezést akkor:
    #1064 - A Szintaktikai hiba a 'item_tbl.subscr_type)>=CURDATE()


    Köszi.
    Mutasd a teljes hozzászólást!
  • Vagyis a `mysqli_query` úgy jelezte a hibát, hogy `false` értéket adott vissza, abból persze nem lehet fetch-csel olvasni.
    Alapvetően az a gond, hogy kulcsszavak helyett nem lehet mezőneveket használni. Esetleg ilyesmit lehetne logikázni:

    WHERE ... AND ((field='MONTH' AND ...hónapra vonatkozó feltétel...) OR (field='YEAR' AND ...évre vonatkozó feltétel...) )
    Mutasd a teljes hozzászólást!
  • Az az érdekes, hogy változót meg enged betenni, érdekes, hogy mezőből meg nem adja át az értéket. Így működik gond nélkül, csak ez nem jó ugye a célnak:


    $subscr_type="MONTH"; $query["sql"] = "select $users_tbl.id from "; $query["sql"].="$database.$orders_tbl, $database.$users_tbl, $database.$item_tbl "; $query["sql"].="where $orders_tbl.user_id=$users_tbl.id and "; $query["sql"].="$orders_tbl.item_id=$item_tbl.id and "; $query["sql"].="DATE_ADD(date_format($orders_tbl.date_time,"%Y-%m-%d"), INTERVAL $item_tbl.subscr_quantity $subscr_type)>=CURDATE()"; $result = @mysqli_query($connect_mysqli,$query["sql"]); $row = $result->fetch_assoc();
    Akkor szerinted sehogy se lehet az eredeti terv szerint megoldani? Mert akkor megpróbálom máshogy, illetve megnézem azt a módszert is amit írtál.
    Mutasd a teljes hozzászólást!
  • Segíthet a megértésben, ha a mysqli_query előtt kiírod az összerakott sql-t: látni fogod, hogy amikor nem működik, akkor van kulcsszó helyett mezőnév.
    Mutasd a teljes hozzászólást!
  • Azt így csinálom, a kiíratott sql-t szoktam bemásolni tesztelési céllal a phpmyadmin-ba, ha valamiért hibát dob. Mindenesetre nem értem a logikáját, hogy miért így csinálták ezt a msql-nél de mindegy.

    Megyek és átírom az egészet.

    Köszi.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd