Uno de los problemas de tu procedimiento es que estás mezclando sintaxis de PHP con MySQL y algo de SQL Server.
- Las variables con "@" no se declaran en MySQL. Son variables de usuario y no locales de procedures. No tienen tipo de dato hasta que se inicalizan y existen manteniendo su valor hasta que la conexión se cierra.
- Los procedimientos se deben crear (CREATE PROCEDURE xxxxx)
- Si tienen más de una sentencia, deben ir entre cláusulas BEGIN/END, las cuales no se pueden anidar.
- Para cargarlos se debe usar una interfaz, o bien hacerlo por consola, pero en cualquier caso deben usarse cambios de delimitador de sentencias para que se cargue como un sólo bloque, a excepción de crearlas por programación de la aplicación.
- Si las columnas son AUTO_INCREMENT, no hace falta poner el valor a ingresar (lo genera MySQL), y ciertamente no se pone de esa forma.
- Los nombres de bases, tablas, columnas, funciones almacenadas, procedimientos almacenados o triggers no van entre apóstrofes sino que pueden ir entre acentos inversos. Esto es obligatorio si contienen caracteres especiales, palabras reservadas o espacios.
- Los valores numéricos asignados a campos numéricos no van entre apóstrofes.
- Las variables usadas no se encierran ente apóstrofes. Se usan tal y como están.
- Las variables locales no deben tener el mismo nombre de las tablas o los campos. Tampoco llevan "@".
- No existe una sintaxis universal para todos los DBMS. MySQL, Postgre, Oracle, DB2 o SQL Server tienen diferentes sintaxis para los procedimientos.
Una sintaxis aproximada de lo que necesitas sería:
Código MySQL:
Ver originalDELIMITER $$
INSERT INTO products_description
(language_id
, products_name
, products_description
, products_url
, products_viewed
) VALUES(3, titulo
, 'descripcion ejemplo','url.test.com', 1); DELIMITER ;