Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

373
Views
¿Es posible usar (con PHP) declaraciones preparadas que se hayan declarado previamente en mysql CLI?

En mysql CLI he preparado una declaración como esta:

 PREPARE registrarUser FROM 'INSERT INTO Users (Users_name,Email,pass) values (?,?,?)'

En mi base de datos, las declaraciones preparadas deben hacerse de esta manera, en lugar de usar un método php como este:

 $conn->prepare("INSERT INTO Users (Users_name,Email,pass) VALUES (?, ?, ?)");

Entonces no puedo usar la declaración preparada o vincular argumentos.

Probé esta consulta que imita las declaraciones requeridas en mysql CLI

 $query = sprintf(' SET @Users_name = "%s"; SET @Email= "%s"; SET @pass = "%s"; EXECUTE registrarUser USING @Users_name, @Email, @pass;',$Users_name,$Email,$pass);

Pero devuelve el siguiente error de sintaxis:

 Errormessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @Email= "eds@gmail.com"; SET @pass = "Thinkshap2"; EXECUTE registrar' at line 2

¿Alguien sabe si hay una manera de hacerlo? Muchas gracias por adelantado;

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No es posible.

Del manual de MySQL

El alcance de una declaración preparada es la sesión dentro de la cual se crea...

  • Una declaración preparada creada en una sesión no está disponible para otras sesiones.
over 4 years ago · Santiago Trujillo Report

0

No, no es posible. Las declaraciones preparadas tienen el alcance de la sesión. Cada vez que abre una nueva conexión en PHP, abre una nueva sesión de MySQL. Puede usar PREPARE y EXECUTE en PHP, pero ambas operaciones deben realizarse en la misma sesión.

En otras palabras, las declaraciones creadas con PREPARE no persisten en el servidor de la base de datos. Solo existen durante el tiempo de vida de la sesión actual.

La razón por la que obtiene un error de sintaxis en PHP es porque ha concatenado varias declaraciones SQL juntas. No puede hacer eso de forma predeterminada en PHP debido a consideraciones de seguridad. Ejecute cada uno por separado. Por ejemplo, esto funciona:

 $stmt = $mysqli->query("PREPARE registrarUser FROM 'SELECT ?'"); $stmt = $mysqli->query("EXECUTE registrarUser USING 32");

Advertencia El uso de PREPARE y EXECUTE desde PHP anula el propósito principal del uso de declaraciones preparadas en PHP. La principal ventaja es que puede separar las variables de la sintaxis SQL. No puedes hacer eso con PREPARE y EXECUTE . Es por eso que tanto PDO como mysqli han preparado declaraciones. Use mysqli::prepare() y mysqli_stmt::execute()

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!