Php Mysql_stmt::bind_result()

Php Mysql_stmt::bind_result(),php,mysql,subquery,Php,Mysql,Subquery,我在php脚本中执行以下mysql查询: $qr = "Select p.productID,p.productDesc,p.productQty,"; $qr .= "p.productPr,p.type,p.gender,p.date From"; $qr .= " products AS p"; $qr .= " INNER JOIN(Select c.productID, GROUP_CONCAT("; $qr .= "DISTINCT c.availCol) AS color_list

我在php脚本中执行以下mysql查询:

$qr = "Select p.productID,p.productDesc,p.productQty,";
$qr .= "p.productPr,p.type,p.gender,p.date From";
$qr .= " products AS p";
$qr .= " INNER JOIN(Select c.productID, GROUP_CONCAT(";
$qr .= "DISTINCT c.availCol) AS color_list FROM";
$qr .= " availColors AS c GROUP BY c.productID) AS colors";
$qr .= " ON p.productID = colors.productID":
$qr .= " INNER JOIN(SELECT s.productID, GROUP_CONCAT";
$qr .= "(s.availSizes) AS size_list FROM availSizes AS s";
$qr .= " GROUP BY s.productID) AS sizes ON p.productID";
$qr .= " = sizes.productID";
$qr .= " INNER JOIN(SELECT avp.productID, avp.productImg";
$qr .= " FROM availImg AS avp ORDER BY avp.productID";
$qr .= " LIMIT 3) AS images ON images.productID = ";
$qr .= " p.productID";
$qr .= " WHERE p.productID = ?";
$qr .= " GROUP BY p.productID";

$stm = $mysqli->prepare($qr);
$stm->bind_param('s',$id);
$stm->execute();
$stm->store_result();

If($stm->num_rows == 1){
$stm->bind_result($pid,$desc,$qty,$pr,$type,$gender,
$date,$colID,$color,$sizeID,$sizes,$imgID,$imgUrl);

$stm->fetch();
......
}
当我执行脚本时,会出现一个错误,错误是: Mysqli_stmt::bind_result():绑定变量的数量不确定 匹配中已准备语句中的字段数

我理解这个错误的含义,但是我已经根据所选列的数量重新检查并重新计算了bind_result()中bind变量的数量,我只是不知道哪里出了问题。我不知道PHP如何计算从mysql子查询返回的值。有人能在这方面提供帮助吗?我一整天都在这上面!谢谢你的帮助

$qr = "
Select
    p.productID,
    p.productDesc,
    p.productQty,
    p.productPr,
    p.type,
    p.gender,
    p.date
From
    products AS p
    INNER JOIN(
        Select 
            c.productID, 
            GROUP_CONCAT(DISTINCT c.availCol) AS color_list 
        FROM
            availColors AS c GROUP BY c.productID) AS colors
            ON
                p.productID = colors.productID
        INNER JOIN(
            SELECT
                s.productID,
                GROUP_CONCAT(s.availSizes) AS size_list
            FROM
                availSizes AS s
            GROUP BY
                s.productID
        ) AS sizes
    ON
        p.productID = sizes.productID
        INNER JOIN(
            SELECT
                avp.productID,
                avp.productImg
            FROM
                availImg AS avp
            ORDER BY
                avp.productID
            LIMIT
        3) AS images
    ON
        images.productID =  p.productID
WHERE
    p.productID = ?
GROUP BY
    p.productID";

尝试像这样格式化您的查询,多行字符串在PHP中非常好,几乎不可能逐行理解它。如果我没有弄错,您至少缺少一个右括号,那么第一个内部联接开括号不是闭合的。

您只是在联接其他表/列,而没有选择列。尝试将列添加到查询的开头(在来自的
之前)


多亏了MYSQL工作台,我终于找到了答案!我在mysql workbench上运行查询,计算返回的列数,并在bind_result()上为每个列声明变量。

多行和右括号不应该给出mysql_stmt::bind_result错误。我不明白你说的和那个错误有什么关系!我已经注意到了多行的内容,不过谢谢你的这一点。此外,如果我错过了一个开括号或闭括号,那一定是在我输入这个问题时。谢谢@Sean。内部联接中的限制似乎不起作用?上述查询中的“限制3”仅为所选ID返回一个imageUrl!有什么不对劲吗?
$qr = "SELECT p.productID,p.productDesc,p.productQty,";
$qr .= "p.productPr,p.type,p.gender,p.date,";

// colors columns
$qr .= "colors.productID, colors.color_list,";
// sizes columns
$qr .= "sizes.productID, sizes.size_list,";
// images columns
$qr .= "images.productID, images.productImg ";

$qr .= "From products AS p";
$qr .= " INNER JOIN(Select c.productID, GROUP_CONCAT(";
$qr .= "DISTINCT c.availCol) AS color_list FROM";
$qr .= " availColors AS c GROUP BY c.productID) AS colors";
$qr .= " ON p.productID = colors.productID":
$qr .= " INNER JOIN(SELECT s.productID, GROUP_CONCAT";
$qr .= "(s.availSizes) AS size_list FROM availSizes AS s";
$qr .= " GROUP BY s.productID) AS sizes ON p.productID";
$qr .= " = sizes.productID";
$qr .= " INNER JOIN(SELECT avp.productID, avp.productImg";
$qr .= " FROM availImg AS avp ORDER BY avp.productID";
$qr .= " LIMIT 3) AS images ON images.productID = ";
$qr .= " p.productID";
$qr .= " WHERE p.productID = ?";
$qr .= " GROUP BY p.productID";