php直接使用mysql函数调用存储过程,有点郁闷。
创建存储过程:
mysql>DELIMITER $$ mysql>CREATE PROCEDURE `tasknum`( status int(1) ) mysql>begin
mysql>SELECT count(r.rid) as rksum,u.username FROM `nb_replytask` r
mysql>left join `nb_users` u on ( r.uid = u.uid )
mysql>where r.status=status group by u.uid order by rksum desc mysql>end mysql>$$ mysql>DELIMITER ;
|
使用mysql客户端调用存储过程倒是很方便:下面这段代码就直接返回结果了。
mysql> set @status=2; mysql>call tasknum( @status );
|
php直接用mysql函数调用的时候就郁闷了,
我连接mysqlserver的时候是mysql_connect( 'localhost', 'root', 'root' )这样连接的,总是返回不了结果,
在网上找了半天都是这种方法,痛恨那些copy人家成果的家伙,错误的也不修改一下就直接发布上去了
最后在一国外的论坛上找到方法,就是在连接mysqlserver的时候指定后面new_link和client_flags两个参数:
mysql_connect( 'localhost', 'root', 'root', 0, 131072 );这样就可以了。
完整的php代码:
<?php $dbLink = mysql_connect( 'localhost', 'root', 'root', 0, 131072 ); //选择数据库以及设置连接编码
mysql_select_db ( 'unionbbs', $dbLink ); mysql_query ( "set names gbk" ); //设置mysql变量以及调用存储过程
mysql_query ( "set @status=2;" ); $resResult = mysql_query ( "call tasknum( @status );" ); //获取结果集数组
while ( $rowsArray = mysql_fetch_array ( $resResult, MYSQL_ASSOC ) ) { $procedureDataArray[ ] = $rowsArray; } //打印调试
echo '' ; var_dump ( $procedureDataArray ); //关闭mysqlserver连接
mysql_close ( $dbLink ); ?>
|
用PDO很方便,直接调用就可以了代码如下:
<?php try { $dbLinkObject = new PDO( 'mysql:dbname=unionbbs;host=localhost', 'root', 'root'); }catch (PDOException $e){ echo 'Connection failed: ' . $e->getMessage(); }
$dbLinkObject -> query( "SET NAMES GBK" ); $dbLinkObject -> exec( "set @status=2;" ); $resResult = $dbLinkObject -> query( "call tasknum( @status );" ); $procedureDataArray = $resResult->fetchAll(PDO::FETCH_ASSOC);
echo '' ; var_dump ( $procedureDataArray ); ?>
|
这破问题郁闷了我好一阵子,记录上来以后备用。
阅读(1653) | 评论(0) | 转发(0) |