tipos sentencias preparadas mysqli_query multiples ejemplo consultas con php mysql mysqli prepared-statement

mysqli_query - sentencias preparadas php pdo



mysqli: ¿puede preparar múltiples consultas en una sola declaración? (2)

Me gustaría saber si puedo preparar una declaración mysqli que ejecute múltiples consultas:

mysqli->prepare(query1 ...1,2,3 param...; query2...4,5 param...); or mysqli->prepare(insert into ...1,2,3 param...; insert into...4,5 param...); and after all mysqli->bind_param("sssss", 1, 2, 3, 4, 5);

De esa forma comete un error: Llamar a una función miembro bind_param () en un no objeto en ...

$stmt = $sql->getQueryPrepare("INSERT INTO user (id_user, username, pw, email) VALUES (?,?,?,?); INSERT INTO process (id_user, idp) VALUES (?,?);"); $stmt->bind_param("ssssss",$id, $username, $pw, $email, $id, $idp); $stmt->execute(); $stmt->close();


No, una sola llamada a la función mysqli prepare () no puede preparar múltiples consultas a la vez. Sin embargo, puede preparar más de una consulta para la ejecución mediante el uso de diferentes variables. La documentación para esta función está disponible aquí.

También parece que estás intentando configurar una transacción, que es una pregunta diferente a la que pediste. Si eso es lo que realmente desea saber, tendrá que proporcionar más información sobre la configuración de su base de datos y, probablemente, más detalles sobre el caso de uso que está tratando de resolver.


Una declaración preparada solo puede ejecutar una consulta MySQL. Puede preparar tantas declaraciones como desee en diferentes variables:

$stmtUser = $sql->prepare("INSERT INTO user (id_user, username, pw, email) VALUES (?,?,?,?)"); $stmtProc = $sql->prepare("INSERT INTO process (id_user, idp) VALUES (?,?);");

Y luego ejecútelos más tarde. Si quiere asegurarse de que ninguno de los dos se ejecute a menos que ambos puedan ejecutarse, entonces debe examinar las transacciones, como dijo Thomas.

Además, un consejo general: "llamada a la función de miembro en un no objeto" es el error estándar que se obtiene cuando prepare() falla y, por lo tanto, $stmt no es realmente un objeto de declaración preparado. Por lo general, significa que debe buscar un error en su declaración de prepare() lugar de algo más adelante.