我已经使用mysql编写了一个基本的存储过程
DELIMITER //
CREATE PROCEDURE `sp_sel_test`()
BEGIN
SELECT * FROM category c;
END//
DELIMITER ;现在我从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;
?> 现在它给出了错误
过程fourthes_a.sp_sel_test无法在给定上下文中返回结果集
发布于 2011-04-13 05:45:46
当查询失败时,mysql_query()返回false。您没有检查存储过程查询是否成功,所以很可能是将布尔值FALSE传递给fetch函数,这是理所当然的抱怨。
像这样重写代码,作为最低限度的代码,以便进行正确的错误处理:
$res = mysql_query('call sp_sel_test()');
if ($res === FALSE) {
die(mysql_error());
}永远不要假设查询成功。即使SQL语法是完美的,也有太多其他原因导致查询不能检查它是否工作。
发布于 2011-04-13 06:17:30
为了在php中使用存储过程,你需要在连接时设置客户端标志。使用以下命令:
mysql_connect($this->h,$this->u,$this->p,false,65536);有关更多详细信息,请参阅MySQL Client Flags。PHP MySQL不允许你在一个查询中运行多条语句。为了克服这个问题,您必须通过在连接中设置CLIENT_MULTI_STATEMENTS标志来告诉PHP允许这样的查询。
发布于 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)。
所以,你的选择应该是这样的:
SELECT * FROM category **INTO** c;http://www.cs.duke.edu/csl/docs/mysql-refman/stored-procedures.html
https://stackoverflow.com/questions/5641926
复制相似问题