用php调用emp_id这个变量,怎么写?
回复讨论(解决方案) query(call testit($emp_id));print_r($result);?>
你这个还是获取不到emp_id的值
当然取不到!因为 emp_id 是传出的变量
要用 用户变量承接后在读取
mysql_query(call testit(@a));$rs = mysql_query(select @a);print_r(mysql_fetch_assoc($rs));
数据为空,为毛没数据
mysql_query(call testit(@a));
$rs = mysql_query(select @a);
print_r(mysql_fetch_assoc($rs));
用的这个代码
首先你要确认你的call testit() 在命令行能跑。。。
可以跑,不报错
call testit(123)
不要想了,不可能的
php_mysql 扩展创立的时候 mysql 还是在 版本 4 的时代。而 mysql 4 尚不支持存储过程
自然 php_mysql 扩展在设计上也没有考虑到如何返回存储过程的多个结果
这要就是 php_mysql 扩展要被淘汰掉的主要原因之一
进入 mysql 5 时代后,仅在 php_mysql 扩展上打补丁难度太大,所以就有了 php_mysqli 扩展
下面通过一些测试来进行观察
$create =< set names gbk, pdo::attr_errmode => pdo::errmode_exception, pdo::attr_default_fetch_mode => pdo::fetch_assoc,);try { $dbh = new pdo($dsn, 'root', '', $options); $dbh->query($drop); $dbh->query($create); $stmt = $dbh->prepare('call testit(@a)');//, array(pdo::attr_cursor, pdo::cursor_fwdonly)); $pp = 0; $stmt->bindparam(1, $pp, pdo::param_int|pdo::param_input_output, 12); $stmt->execute(); do { $rows = $stmt->fetchall(pdo::fetch_assoc); if ($rows) { print_r($rows); } } while ($stmt->nextrowset()); print_r($dbh->query('select @a')->fetchall());} catch (pdoexception $e) { print error!: . $e->getmessage() . php_eol;}print_r($dbh->query('select @a')->fetchall());
array( [0] => array ( [emps] => 199 ))error!: sqlstate[hy000]: general errorarray( [0] => array ( [@a] => 199 ))
$db = new mysqli('localhost', 'root', '', 'test');$db->query($drop);$db->query($create);$rs = $db->query('call testit(@a)');print_r($rs->fetch_assoc());$db->next_result();$rs = $db->query('select @a') or die($db->error);print_r($rs->fetch_assoc());
array( [emps] => 199)array( [@a] => 199)
关于存储过程的建立和 out 参数的使用,mysql 手册中是这样举例的 一个使用out参数的简单的存储程序的例子。例子为,在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。mysql> delimiter // mysql> create procedure simpleproc (out param1 int) -> begin -> select count(*) into param1 from t; -> end -> //query ok, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call simpleproc(@a);query ok, 0 rows affected (0.00 sec) mysql> select @a;+------+| @a |+------+| 3 |+------+1 row in set (0.00 sec)
茅塞顿开,谢谢版主
