Consulta con referencia a tipo de datos con $smcFunc['db_query']

Started by Dhayzon, July 28, 2020, 07:29:20 PM

Previous topic - Next topic

Dhayzon

tengo


$query_where_params = array(
                'interval_num'=> 1,
                'interval_val'=> 'DAY',
            );


my where


FROM_UNIXTIME(m.poster_time) >= date_sub(now(), interval {int:interval_num} {string:interval_val})





mi problema

{int:interval_num} {string:interval_val}

me manda error db

supongo que el mecanismo de seguridad, para los tipos de datos no esta echo para que  funcione a si

ya que funciona a si {int:interval_num} DAY

CONFIRMEN MI DUDA SI {int:interval_num} {string:interval_val} A SI junto no debe usarse

MI CONSULTA
FROM_UNIXTIME(m.poster_time) >= date_sub(now(), interval 1 DAYl}

es un where para  sacar los ultimos mensajes de las ultimas 24 H





Dhayzon

que la consulta esta mal escrita, como dije 

juntos   {int:interval_num} {string:interval_val} no trabajan ...  que pasa si pongo mas {int:otro} {string:otro} {int:otro} {string:otro} deberias trabajar? 

eso en una misma linea
obiamente esto si trabajaría

AND m.approved = {int:is_approved}
AND m.approved = {int:is_approved}
AND m.approved = {int:is_approved}
AND m.approved = {int:is_approved}
AND m.approved = {int:is_approved}

pero  esto no se si debe trabajar (es un ejemplo)

AND m.approved = {int:is_approved} {int:is_approved} {int:is_approved}

vicram10

si colocas en duro todo el select, hace lo que debe hacer?.
Te digo por que segun se puede apreciar, deberia igual de trabajar, ya que lo que hace el db_query es reemplazar nada mas de acuerdo al tipo de caracter, no deberia de dar problema, pero lo que puede pasar es que el select al armar quede mal.

Para solucionar lo haria de otra manera, que traiga todo los registros que sean desde ayer, y con php preguntar si está dentro de las 24 horas. 

Edito:

Me puse a verificar y te funcionará de la siguiente forma

Code (php) Select

$sql = $smcFunc['db_query'](
            '',
            'SELECT c.*
            FROM {db_prefix}messages c
            WHERE FROM_UNIXTIME(c.poster_time) > DATE_SUB(NOW(), INTERVAL {int:tiempo_transcurrido} {raw:etiqueta_tiempo})
            AND FROM_UNIXTIME(c.poster_time) <= NOW()',
            array(
                'tiempo_transcurrido' => 72,
                'etiqueta_tiempo' => 'HOUR',
            )
        );
        $prueba = array();
        while($row = $smcFunc['db_fetch_assoc']($sql)){
            $prueba[] = $row;
        }
        var_dump($prueba);

All Colours Sam

{string:interval_val}  va a encerrar tu valor en comas sencillas 'valor'  si quieres usar expresiones directamente usar raw  {raw:interval_val}  o usa la expresión directamente en el query. No tiene mucho sentido pasar una expresión por ese proceso.
Oh, wouldn't it be great if I *was* crazy? ...then the world would be okay
Suki

vicram10

Quote from: Suki on July 29, 2020, 10:15:10 AM
{string:interval_val}  va a encerrar tu valor en comas sencillas 'valor'  si quieres usar expresiones directamente usar raw  {raw:interval_val}  o usa la expresión directamente en el query. No tiene mucho sentido pasar una expresión por ese proceso.

Justo respondio Suki a la misma vez que puse como sería, y si es asi como dice Suki (quien mas que ella para responder jeje), sería usando RAW que expone tal cual vos colocas sin agregarle nada al texto que coloques en el query

Dhayzon

genial, el problema era  el RAW, aun que como dice no tendría sentido jaja, pero lo uso mas para que quede como forma nativa como para seguir el patron

Gracias. .solucionado!!

vicram10

Asi mismo, pero para poder encontrar, lei toda la funcion que hace db_query 😆
Marcamos como solucionado igual tu post para poder tener un orden jeje.

Advertisement: