使用php调用存储过程

Pra*_*rya 2 php mysql stored-procedures

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

DELIMITER // 

CREATE PROCEDURE `sp_sel_test`()
BEGIN

    SELECT * FROM category c;

END// 
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

现在我从php调用它

php代码是:

  <?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;

?> 
Run Code Online (Sandbox Code Playgroud)

现在它给出了错误

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

Mar*_*c B 5

mysql_query()查询失败时返回false.您没有检查您的sproc查询是否成功,因此很可能您将该布尔值FALSE传递给fetch函数,这是正确的抱怨.

为了正确的错误处理,像这样重写你的代码,作为一个简单的代码:

$res = mysql_query('call sp_sel_test()');
if ($res === FALSE) {
    die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud)

永远不要假设查询成功.即使SQL语法是完美的,但是有太多其他原因导致查询无法检查它是否有效.