Php 调用过程时显示存储过程查询

Php 调用过程时显示存储过程查询,php,stored-procedures,mysqli,Php,Stored Procedures,Mysqli,我创建了一个这样的存储过程,并使用输入参数调用该过程。我希望在使用参数调用过程时,像在正常情况下的echo查询一样,自己获取过程 $procedure = "CREATE PROCEDURE pdruser_login(IN userName VARCHAR(300), IN password VARCHAR(500)) BEGIN

我创建了一个这样的存储过程,并使用输入参数调用该过程。我希望在使用参数调用过程时,像在正常情况下的echo查询一样,自己获取过程

            $procedure              =   "CREATE PROCEDURE pdruser_login(IN userName VARCHAR(300), IN password VARCHAR(500)) 
                                        BEGIN 
                                        DECLARE _sqlQuery VARCHAR(2046);
                                        SET _sqlQuery = 'SELECT login_id, authorized, admin_authorize FROM tbluser_login WHERE user_name = userName AND user_pwd = password AND authorized = 1 AND privacy_policy = 1 AND is_deleted = 0';
                                        SET @sqlQuery = _sqlQuery;
                                        PREPARE dynquery FROM @sqlQuery;
                                        EXECUTE dynquery;
                                        DEALLOCATE PREPARE dynquery;
                                        END;";              
            if (!mysqli_query($this->con,"DROP PROCEDURE IF EXISTS pdruser_login") ||!mysqli_query($this->con,$procedure))
                {
                    file_put_contents("minefile1.txt", "Stored procedure creation failed: (" . mysqli_errno($this->con) . ") " . mysqli_error($this->con));
                }
            if (!($result   =   mysqli_query($this->con,"CALL pdruser_login('".$userName."','".$password."'"))) 
                {
                    file_put_contents("minefile2.txt","CALL failed: (" . mysqli_errno($this->con) . ") " . mysqli_error($this->con));
                }   
但是上面的过程显示了一个错误“CALL failed:(1064)您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解第1行“”附近使用的正确语法”


调用存储过程时如何显示存储过程查询。是否有任何方法可以获取动态查询,以便在复杂查询中轻松跟踪错误

由于某些原因,您没有将SQL存储在变量中-因此,您不能将其存储在调试信息中

$sql = "DROP PROCEDURE IF EXISTS pdruser_login";
mysqli_query($this->con,$sql) or trigger_error(mysqli_error($this->con)." [$sql]");
$sql = $procedure;
mysqli_query($this->con,$sql) or trigger_error(mysqli_error($this->con)." [$sql]");
// and so on.

请注意,触发器错误比文件内容更有用。它可以将错误放在日志文件中,也可以在屏幕上显示,这非常方便。并且它有必不可少的文件/行戳

首先用于创建MySQL过程,您需要设置分隔符而不是;然后在过程执行后重置分隔符,因为在过程内部所有的块都应视为单个查询,但过程内部的查询可能会破坏sql语句(由于使用;)

来自mysql站点的示例

DELIMITER // 
DROP PROCEDURE IF EXISTS GetAllProducts //
CREATE PROCEDURE GetAllProducts() 
BEGIN 
  SELECT * FROM products; 
END // 
DELIMITER ;