我有4个菜单的PHP代码(产品,供应商,购买,客户)。每个菜单都有自己的存储过程。每个意思都有这些代码:
产品代码:
<?php
$sql=$mysqli->query("call selectproducts()");
$i=1;
while($row=mysqli_fetch_array($sql)){
$id=$row['prodid'];
$date=$row['prodname'];
$item=$row['proddescription'];
$qtyleft=$row['prodsupplier'];
$qty_sold=$row['proddate'];
$price=$row['prodprice'];
$sales=$row['prodquantity'];
if($i%2){
?>
<tr id="<?php echo $id; ?>" class="edit_tr">
<?php } else { ?>
<tr id="<?php echo $id; ?>" bgcolor="#f2f2f2" class="edit_tr">
<?php } ?>
<td class="edit_td"><span class="text"><?php echo $date; ?></span> </td>
<td><span class="text"><?php echo $item; ?></span> </td>
<td><span class="text"><?php echo $qtyleft; ?></span></td>
<td><span id="last_<?php echo $id; ?>" class="text">
<?php
echo $qty_sold;
?>
我的问题是每当我尝试在其他菜单中使用存储过程时,甚至在1菜单中使用其他方法中的错误(供应商,购买,客户):
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
简而言之,如果我只包含一(1)个存储过程,则会发生错误。一切都会有效的唯一方法是当我以正常方式使用它时(SELECT * from table)。
可能是什么问题?请帮助我......这是我项目中唯一的问题。
Mysql存储过程代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `selectproducts`()
begin
select * from products order by ProdID;
end
这是完整的代码: http://jsfiddle.net/WKKD4/
抱歉,我没有别的地方可以穿上它。
答案 0 :(得分:2)
MySQL Procedure不返回结果集。您可以从MySQL过程访问结果的方式如下所示。
CREATE PROCEDURE selectproducts (OUT ver_param VARCHAR(25))
BEGIN
# Set value of OUT parameter
SELECT count(ProdId) INTO ver_param from products;
END;
现在要访问PHP脚本中的输出,请在程序调用后立即执行以下查询。
$sql = $mysqli->query("call selectproducts(@productcount)");
$results = $mysqli->query ("select @productcount as COUNT");
$rows = mysqli_fetch_array($results);
答案 1 :(得分:1)
试试这个:
**
$sql->close();
$mysqli->next_result();
**
在获取结果后放置它并看到魔法。
答案 2 :(得分:0)
尝试对代码进行此更改:
<?php
$result = $mysqli->query("call selectproducts()");
$i=1;
while($row = $result->fetch_assoc()){
$id=$row['prodid'];
$date=$row['prodname'];
$item=$row['proddescription'];
$qtyleft=$row['prodsupplier'];
$qty_sold=$row['proddate'];
$price=$row['prodprice'];
$sales=$row['prodquantity'];
if($i%2){
?>
<tr id="<?php echo $id; ?>" class="edit_tr">
<?php } else { ?>
<tr id="<?php echo $id; ?>" bgcolor="#f2f2f2" class="edit_tr">
<?php } ?>
<td class="edit_td"><span class="text"><?php echo $date; ?></span> </td>
<td><span class="text"><?php echo $item; ?></span> </td>
<td><span class="text"><?php echo $qtyleft; ?></span></td>
<td><span id="last_<?php echo $id; ?>" class="text">
<?php
echo $qty_sold;
?>
这是一个小小的改变,但它应该有效。
-------- --------- EDITED
仅用于调试,用以下代码替换代码:
$rs = $mysqli->query("call selectproducts();");
while($row = $rs->fetch_object())
{
var_dump($row);
}
------------ EDIT2 ----------------------
继续使用debuugging的东西....制作一个名为test.php的新PHP脚本....将此代码放入其中:
<?php
include('db.php');
$query = "call selectproducts()";
if ($result = $mysqli->query($query)) {
/* obtener array asociativo */
while ($row = $result->fetch_assoc()) {
echo $row['prodid']."------".$row["prodname"])."</br>";
}
/* liberar el resultset */
$result->free();
}
?>
如果以正确的方式显示您的数据,则问题不在此处。你可以发布这个脚本的结果吗。
Saludos;)
答案 3 :(得分:0)
您将获得多个结果。 SELECT的结果以及调用的结果。
要获得“下一个”结果,您必须致电:
<?php
// Assuming $connection is your MySQLI object
while($connection->next_result()) $connection->store_result();
?>