Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的PHP注入在硬编码时工作_Php_Mysql - Fatal编程技术网

MySQL中的PHP注入在硬编码时工作

MySQL中的PHP注入在硬编码时工作,php,mysql,Php,Mysql,我可以在Workbench中成功测试以下SQL查询: $interviewInfo = $this->db->fetchAll(" SELECT c.s, c.t, i.u, i.v, qa.w, i.x FROM

我可以在Workbench中成功测试以下SQL查询:

        $interviewInfo = $this->db->fetchAll("
            SELECT 
                c.s,
                c.t,
                i.u,
                i.v,
                qa.w,
                i.x
            FROM
                XXX AS i,
                YYY as ip,
                ZZZ AS qa,
                BBB AS c
            WHERE
                c.s = :CompanyId AND ip.r = i.Id
                    AND i.s = c.s
                    AND ip.t = qa.p
                    AND i.h > 0
            ORDER BY i.q DESC
            LIMIT 3", array("CompanyId"=>$companyId));
但在SQL语句中使用关联数组依赖项注入时,它返回一个空数组

我已经尝试直接插入CompanyId来代替:CompanyId,然后它就工作了

我不知道这里发生了什么,因为:

MySQL没有错误。 查询是正确的,我可以验证这一点。 我还可以验证CompanyId是否存在,是否为有效整数。 这不是工作原理。您必须先查询,然后查询,然后调用fetchAll以获取结果。像这样的方法应该会奏效:

$stmt = $this->db-prepare("SELECT 
                c.s,
                c.t,
                i.u,
                i.v,
                qa.w,
                i.x
            FROM
                XXX AS i,
                YYY as ip,
                ZZZ AS qa,
                BBB AS c
            WHERE
                c.s = :CompanyId AND ip.r = i.Id
                    AND i.s = c.s
                    AND ip.t = qa.p
                    AND i.h > 0
            ORDER BY i.q DESC
            LIMIT 3");
$stmt->execute(array("CompanyId"=>$companyId));
$interviewInfo = $stmt->fetchAll();
请注意,您还应该通过检查$stmt是否为false以及execute是否返回false来检查prepare和execute语句是否成功。

这不是工作原理。您必须先查询,然后查询,然后调用fetchAll以获取结果。像这样的方法应该会奏效:

$stmt = $this->db-prepare("SELECT 
                c.s,
                c.t,
                i.u,
                i.v,
                qa.w,
                i.x
            FROM
                XXX AS i,
                YYY as ip,
                ZZZ AS qa,
                BBB AS c
            WHERE
                c.s = :CompanyId AND ip.r = i.Id
                    AND i.s = c.s
                    AND ip.t = qa.p
                    AND i.h > 0
            ORDER BY i.q DESC
            LIMIT 3");
$stmt->execute(array("CompanyId"=>$companyId));
$interviewInfo = $stmt->fetchAll();

请注意,您还应该检查prepare和execute语句是否成功,方法是检查$stmt是否为false,execute是否返回false。

您使用的是什么数据库包装器?@Nick我们使用PHP的PDO作为MySQL事务的包装器。您使用的是什么数据库包装器?@Nick我们使用PHP的PDO作为包装器围绕MySQL事务。