【问题标题】:Stored procedure stopped other queries in PHP page MySql存储过程停止了 PHP 页面 MySql 中的其他查询
【发布时间】:2016-03-12 12:50:42
【问题描述】:

我从这里更改了我的代码

    $query = "SELECT first_id, first, webpage_id FROM first WHERE first= ?";
  $stmt = $connect->prepare($query);
  $stmt->bind_param('s', $first);
  $stmt->execute();

$result = $stmt->get_result();

while($row = $result->fetch_array()){
    $first_id = $row['first_id'];
    $first = $row['first'];
    $webpage_id = $row['webpage_id'];

echo '<div class="yellow container">
       <div class="alt">
        <div class="first_name left"><h1>'.$row['first'].'</h1></div>
        <div>
          <div class="add_sub"><input type="button" class="addsub" data-id="'.$row['first_id'].'" /></div>
        </div>
       </div>';

    $query = "SELECT webpage_id, url, explanation  FROM webpage WHERE webpage_id= ?";
      $stmt = $connect->prepare($query);
      $stmt->bind_param('i', $webpage_id);
      $stmt->execute();
      $result_ce = $stmt->get_result();

为了在我的网站中使用存储过程而进入这个。我的第一个代码工作完美,但第二个代码在正确执行存储过程后停止工作。它说 在第 42 行的布尔值上调用成员函数 bind_param()

$result = $connect->query("CALL selectfirst('$first')");

// all codes above stays same

while($row = $result->fetch_array()){
    $first_id = $row['first_id'];
    $first = $row['first'];
    $webpage_id = $row['webpage_id'];

echo '<div class="yellow container">
       <div class="alt">
        <div class="first_name left"><h1>'.$row['first'].'</h1></div>
        <div>
          <div class="add_sub"><input type="button" class="addsub" data-id="'.$row['first_id'].'" /></div>
        </div>
       </div>';

    $query2 = "SELECT webpage_id, url, explanation  FROM webpage WHERE webpage_id= ?";
      $stmt = $connect->prepare($query2);
      $stmt->bind_param('i', $webpage_id);   //line 42
      $stmt->execute();
      $result_ce = $stmt->get_result();

我的存储过程由phpmyadmin gui 编写。我刚刚写了SELECT * FROM first = ufirst; 并点击了创建。也许有问题?

重要!!我在第二个 sql 之后使用了 trigger_error($connect-&gt;error."[$query2]"),页面显示 *Commands out of sync; you can't run this command now[SELECT webpage_id, url, explanation FROM webpage WHERE webpage_id=53]* 这是什么意思?

【问题讨论】:

  • @its 清楚地改变了第二个 sql 命令中的某些内容。我对吗?因为第一个代码完美无缺
  • 是的,我想让我看看
  • 你检查$webpage_id的值和类型了吗?您确定它包含和INTEGER 值吗?
  • @RichardSt-Cyr 我检查了来自存储过程的所有三行。他们工作正常。我开始认为问题是来自 XAMPP 的 PHP 或 MySQL 的版本
  • 在设置 $query2 之前尝试调用 mysql_free_result($result)。这听起来像是与此问题相关的问题:stackoverflow.com/questions/614671/…

标签: php mysql stored-procedures phpmyadmin


【解决方案1】:

当你调用一个存储过程可能会产生多个结果集,你必须在运行另一个查询之前释放所有的结果集,在调用一个存储过程得到结果后添加这一行:

$connect->next_result();

您可以使用fetchAll 并在结果集数组中迭代,而不是使用while($row = $result-&gt;fetch_array()){...},因为当您使用next_result 时,结果资源将会丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2014-06-04
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多