V1.7 ¿Cómo usar las tablas MySQL en Prestashop? 2

jaime042

New member
XNullUser
Joined
Sep 26, 2021
Messages
20
Reaction score
6
Points
3
NullCash
21

Db::getInstance()->update()​

La función update() es para actualizar datos de la tabla que indiquemos.

Funciona de la siguiente manera:

Db::getInstance()->update(‘tabla’, array(‘celda’ => ‘datos), ‘where … ‘);

Un ejemplo, sería si queremos actualizar en la tabla ps_product el campo active a 1 del id_product 50 sería así:

Db::getInstance()->update('product', array('active' => 1), 'id_product = 50');
A tener en cuenta:

  • el WHERE no se escribe. Se ponen los parámetros directamente. Si hay un AND se puede poner sin problemas.
  • El nombre de la tabla va sin el prefijo de prestashop (por defecto el ps_)
  • Se pueden poner los datos que queramos dentro del array.
Un ejemplo más complejo. Ahora actualizaremos el active = 1 y el id_manufacturer = 10 dónde los productos estén desactivados (active = 0) y dónde los id_product sean mayores a 100:

// para hacerlo más cómodo, el array lo declaramos fuera
$data = array(
'active' => 1,
'id_manufacturer' => 10
);
Db::getInstance()->update('product', $data, 'id_product > 100 AND active = 0');
En el campo del WHERE se pueden poner variables. Si quieres actualizar datos dónde el id_product = $id_product sería así:

// para hacerlo más cómodo, el array lo declaramos fuera
$data = array(
'active' => 1,
'id_manufacturer' => 10
);
$id_product = 1; // variable $id_product;
Db::getInstance()->update('product', $data, 'id_product = '.(int)$id_product);

Db::getInstance()->delete()​

El delete() sirve para eliminar datos de la tabla. Utiliza el siguiente formato:

Db::getInstance()->delete('nombre_tabla', 'WHERE');
Como en update() e insert(), el nombre de la tabla va sin el _DB_PREFIX_ (ps_) delante. El Where, no se escribe y se pueden poner operadores de SQL dentro.

Por ejemplo, si queremos eliminar de la tabla ps_product todos los productos que estén desactivados (active = 0) sería así:

Db::getInstance()->delete('product', 'active = 0);
Como en los casos anteriores, se pueden pasar variables. Por ejemplo:

$id_product = 1; // pasamos la variable
Db::getInstance()->delete('product', 'id_product = '.(int)$id_product);

Db::getInstance()->execute()​

El execute() sirve para ejecutar SQL directamente. Yo sólo lo recomiendo para crear tablas. Ya que para UPDATE, SELECT o INSERT tenemos las funciones anteriores.

Para crear una tabla sería así:

Db::getInstance()->execute('CREATE TABLE IF NOT EXISTS '._DB_PREFIX_.'clientes (
id_cliente int(11) NOT NULL AUTO_INCREMENT PRIMARY,
profesion text NOT NULL,
) ENGINE='.MYSQL_ENGINE.' DEFAULT CHARSET=utf8');

Buenas prácticas de las Base de Datos en Prestashop​

Como trabajar con las Base de Datos en Prestashop es muy delicado a la hora de manipular los datos es necesario, o muy recomendable, asegurarnos con qué tipo de datos estamos trabajando.

Usar texto html en Base de Datos​

Para utilizar html o texto en la base de datos es muy recomendable usar el pSQL($texto) de Prestashop. De esta manera nos aseguramos que no nos atacará la base de datos con datos corruptos o inyecciones html.

Por ejemplo, si queremos insertar en el campo de ps_product_lang la description del producto deberíamos hacer así:

$description = '<p>El campo de descripción [...]</p>';
Db::getInstance()->update(
'product_lang',
array('description' => pSQL($description),
'id_product = '.(int)$id_product.' AND id_lang = '.(int)$id_lang
);

Usar datos en Base de Datos de Prestashop​

Para los datos más generales tenemos las asignaciones de tipo de php:

  • (int) Para números enteros. (int)$id_product;
  • (bool) Para booleanos (true y false). (bool)$active;
  • (float) Para números con comas. (float)$price;
 
Top