首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php调用存储过程

使用php调用存储过程
EN

Stack Overflow用户
提问于 2011-04-13 05:37:12
回答 3查看 30K关注 0票数 2

我已经使用mysql编写了一个基本的存储过程

代码语言:javascript
复制
DELIMITER // 

CREATE PROCEDURE `sp_sel_test`()
BEGIN

    SELECT * FROM category c;

END// 
DELIMITER ;

现在我从php调用它。

php代码是:

代码语言:javascript
复制
  <?php
    $txt = $_GET['id'];
    $name = $_GET['name'];
$con = mysql_connect("localhost","four","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("fourthes_a", $con);



//$result = mysql_query("select * from new_c where name like %". $name ."% or c_name like %" . $name . "% order by name asc;");


$result = mysql_query("call sp_sel_test()");
    if ($result === FALSE) {
    die(mysql_error());
}
while($row = mysql_fetch_array($result))
  {
  echo $row['category_id'] . " " . $row['c_name'];
  ?>
  <br />
  <?php
  }

mysql_close($con);
    echo $txt;

?> 

现在它给出了错误

过程fourthes_a.sp_sel_test无法在给定上下文中返回结果集

EN

回答 3

Stack Overflow用户

发布于 2011-04-13 05:45:46

当查询失败时,mysql_query()返回false。您没有检查存储过程查询是否成功,所以很可能是将布尔值FALSE传递给fetch函数,这是理所当然的抱怨。

像这样重写代码,作为最低限度的代码,以便进行正确的错误处理:

代码语言:javascript
复制
$res = mysql_query('call sp_sel_test()');
if ($res === FALSE) {
    die(mysql_error());
}

永远不要假设查询成功。即使SQL语法是完美的,也有太多其他原因导致查询不能检查它是否工作。

票数 5
EN

Stack Overflow用户

发布于 2011-04-13 06:17:30

为了在php中使用存储过程,你需要在连接时设置客户端标志。使用以下命令:

代码语言:javascript
复制
mysql_connect($this->h,$this->u,$this->p,false,65536);

有关更多详细信息,请参阅MySQL Client Flags。PHP MySQL不允许你在一个查询中运行多条语句。为了克服这个问题,您必须通过在连接中设置CLIENT_MULTI_STATEMENTS标志来告诉PHP允许这样的查询。

票数 4
EN

Stack Overflow用户

发布于 2013-06-21 00:36:10

我知道上次回答是一年前,但是...

CREATE PROCEDURE sp_sel_test(输出您的缩放变量INT/TEXT...)

返回结果集的语句不能在存储函数中使用。这包括不使用INTO将列值提取到变量中的SELECT语句、SHOW语句和EXPLAIN等其他语句。对于可以在函数定义时确定以返回结果集的语句,不允许从函数错误中返回结果集(ER_SP_NO_RETSET_IN_FUNC)。对于只能在运行时确定返回结果集的语句,过程%s无法在给定上下文中返回结果集发生错误(ER_SP_BADSELECT)。

所以,你的选择应该是这样的:

代码语言:javascript
复制
       SELECT * FROM category **INTO** c;

http://www.cs.duke.edu/csl/docs/mysql-refman/stored-procedures.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5641926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档