php - Mysql_stmt::bind_result()

标签 php mysql mysqli subquery

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

$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)变量的数量不 匹配准备好的语句中的字段数...

我明白这个错误的含义,但我已经根据 SELECTed 列的数量重新检查并重新计算了 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 中完全没问题,并且几乎不可能理解它逐行连接的意义。如果我没说错的话,你至少缺少一个右括号,第一个内连接左括号没有关闭。

关于php - Mysql_stmt::bind_result(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918988/

相关文章:

php - MySQL 连接两个表 ID 以将结果从一个表生成到另一个表

java - 如何找到我的设备位置并将其存储到我的 sql 数据库中?

mysql - mysql中如何计算复合主键

php - 从 MYSQLI 查询中删除 db $conn

php - 如何搜索两个日期之间的记录。但表日期格式是varchar

php - 为什么 mysqli 给出 "Commands out of sync"错误?

PHP-MySQL-我想将数组中的任何值与我从表单收到的 _POST 值进行比较

php - php mysql 连接中的困惑

php - 如何将 column = value 绑定(bind)到 PDO 语句

javascript - 我如何提交我的 jquery 模态表单