News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

¿Error de sintaxis de la función $smcFunc?

Started by Jotade29, May 26, 2022, 10:06:24 PM

Previous topic - Next topic

Jotade29

Buenas, os comento el problema, quiero hacer una consulta de inventario que dice así:

$cinventarioo = $smcFunc['db_query']('','
SELECT si.description, si.imagen
FROM {db_prefix}items AS si,
  {db_prefix}inventory AS iv
WHERE iv.ownerid = {int:member}
AND iv.itemid = si.id
LIMIT 0, '. 8,
array(
'member' => $smcFunc['db_query']('', '
             SELECT id_member
             FROM {db_prefix}members')
            ,
)
);

El problema está dentro del array en el que especifico qué es member, en este caso, otra consulta... pero cuando cargo la consulta en display.php me salta el siguiente error

"Wrong value type sent to the database. Integer expected. (member)"

En el where he especificado que member es un int "WHERE iv.ownerid = {int:member}" que en realidad el tipo exacto es -> mediumint unsigned.

¿Qué estoy haciendo mal?
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

Diego Andrés

No puedes usar smcFunc dentro de smcFunc, ese es el problema aquí.
Tienes que tener ya disponibles los valores antes de la consulta para usarlos en el arreglo.

SMF Tricks - Free & Premium Responsive Themes for SMF.

Jotade29

Quote from: Diego Andrés on May 26, 2022, 10:09:52 PMNo puedes usar smcFunc dentro de smcFunc, ese es el problema aquí.
Tienes que tener ya disponibles los valores antes de la consulta para usarlos en el arreglo.

Buenas, gracias por responder, ¿y cómo lo hago antes? ¿Hago una consulta antes, por ejemplo $memberid que contiene la 2º consulta, y en el where de la primera consulta -> "WHERE iv.ownerid = {int:member}" cambio "{int:member}" por $memberid?
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

Diego Andrés

Sí, si no conoces esos valores debes hacer otra consulta antes.

En cualquier caso, un "inventario" normalmente estará en un espacio donde ya se tenga una ID, así que me parece extraño lo que estás haciendo.

SMF Tricks - Free & Premium Responsive Themes for SMF.

Jotade29

Quote from: Diego Andrés on May 26, 2022, 10:18:16 PMSí, si no conoces esos valores debes hacer otra consulta antes.

En cualquier caso, un "inventario" normalmente estará en un espacio donde ya se tenga una ID, así que me parece extraño lo que estás haciendo.

Sigue dándome error

$lambda = $smcFunc['db_query']('','
    SELECT id_member
    FROM {db_prefix}members
    ');
   
    $cinventarioo = $smcFunc['db_query']('','
SELECT si.description, si.imagen
FROM {db_prefix}items AS si,
  {db_prefix}inventory AS iv
WHERE iv.ownerid = $lambda
AND iv.itemid = si.id
LIMIT 0, '. 8,
);

También, he probado a poner -> WHERE iv.ownerid = {int:$lambda} y nada... No sé ponerlo correctamente. La consulta la estoy planteado de forma correcta, pero no consigo que meta el valor de la id_member

o para hacerlo más fácil...

¿Cuál sería la función para sacar la id_member del usuario que ha posteado? Es esta -> $message['member']['id'] pero en el display.php no me lo lee
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

Dhayzon

Tu problema es que no sabes como funciona  $smcFunc, trabaja con la documentación https://wiki.simplemachines.org/smf/$smcFunc

$request = $smcFunc['db_query']('', '
SELECT  columnas
FROM {db_prefix}tabla
WHERE id_topic = {int:current_topic}
ORDER BY id_msg
LIMIT {int:start}, {int:max}',
array(
            /**
             * Esto ES UN ARRAY  solo puedes colocar 'clave'=> valor, donde valor solo acepta enteros|cadenas|arrays.. no puedes
             * meter consultas,ademas estos valores son usados arriba ejemplo {int:current_topic} donde current_topic es el valor de array de clave current_topic
             *
             *
             * otro punto importante es este que este array solo es usado para  de alguna forma "sanitizar" los valores dentro de la consulta
             */
  'current_topic' => $topic,
  'start' => $start,
'max' => $limit,
  )
);

$messages = array();

while ($row = $smcFunc['db_fetch_assoc']($request))
{

$messages[] = $row['id_msg'];
}
    var_dump($messages );


y no estas planteando la consulta correctamente  por que
$lambda = $smcFunc['db_query']('','
    SELECT id_member
    FROM {db_prefix}members
    ');
   

y para trabajar com  $message['member']['id']  que está dentro de un while no me imagino que estas haciendo jajaaj


no se que estas tratando de hacer pero supongo que hay una mejor forma de hacerlo

Jotade29

Muchas gracias por tu respuesta, Dhayzon, realmente sigo sin dar con el quiz de la cuestión:

"y no estas planteando la consulta correctamente  por que
Code Select
$lambda = $smcFunc['db_query']('','
    SELECT id_member
    FROM {db_prefix}members
    ');
"

Aun viendo la documentación, sigo sin entender el fallo   
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

Dhayzon

es a si de simple

este código llama a todos los usuarios de tu db,
$smcFunc['db_query']('','
    SELECT id_member
    FROM {db_prefix}members
    ');

para que se vea bonito, la funcion de arriba es lo mismo que hacer esto


function db_query($identifier= '',$query = '' ,$values = array());

ahora si lo pasamos a lo que estas intentando hacer, quedaría a si


function db_query($identifier= '',$query = '' ,$values = array('id'=>db_query($identifier= '',$query = '' ,$values = array()));

lo que es una aberración total, estas creando un bucle infinito,  entonces en resumen no puedes usar $smcFunc dentro de otro $smcFunc, por  que generas un bucle infinito, claro si no te salta un error de sintaxis primero jaaj

Advertisement: