Php Mysql_stmt::bind_result()
我在php脚本中执行以下mysql查询: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
$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";