PHP重现确切的工作SQL查询,但没有结果

时间:2019-02-25 22:01:44

标签: php mysql

我有一个看起来像这样的存储过程:

-- GET INVITES
DROP PROCEDURE IF EXISTS pda.get_invite;
DELIMITER //
CREATE PROCEDURE pda.get_invite ( code varchar(100), invitator_id bigint )
BEGIN
SELECT * FROM pda_invites
WHERE (pda_invites.invitator_id = invitator_id || invitator_id IS NULL)
AND (pda_invites.code = code || code IS NULL);
END //

CALL get_invite ( 'cec95191-23db-11e9-86d7-26374278e97f', NULL );

在phpmyadmin中有效,并提供所需的结果。

现在在php端,我在带有注册参数的过程类中有了某种查询生成器,如下所示:

public function toSQL ( ) {

    // Make sure params are set
    if ( $this->ready == false ) {
        throw new Exception ( 'Called unready procedure  ' . $this->PROCEDURE_NAME . '.' );
        return false;
    }

    // Build query
    $sql= 'CALL ' . $this->PROCEDURE_NAME . '( ';

    $i = 0;
    foreach ( $this->args as $arg ) {
        $param = $this->params[ $i ][ $arg['NAME'] ];

        // Apply valid null values
        if ( $param == null || $param == 'null' ) {
            $sql = $sql . 'NULL';

        // Apply varchar strings
        } else if ( $arg['TYPE'] == 'varchar' ) {
            $sql = $sql . '\'' . $param . '\'';

        // Apply numeric values
        }  else {
            $sql = $sql . $param;
        }      

        if ( ($i+1) < $this->args_count ) {
            $sql = $sql . ', ';
        }

        $i++;
    }

    $sql = $sql . ' );';

    return $sql;
}

在我的数据库服务中,我通过调用以下内容来触发它:

$sql = $procedure->toSQL();    
$result = $con->query($sql);
echo($sql);
echo json_encode($result);

这将导致以下等效查询字符串,这也反映在mysql日志中:

CALL get_invite( 'cec95191-23db-11e9-86d7-26374278e97f', NULL );

但问题是它会产生一个空结果:

{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}

有人知道为什么会这样吗?

0 个答案:

没有答案