php调用mysql存储过程(关于CLIENT_MULTI_RESULTS)
2011-04-27 21:02
507 查看
以为php有用于调用存储过程的内建函数,查了一下发现只能用mysql_query(call
pro())这样的方式,我认为从本质上也就相当于在mysql命令行里执行语句了,由于我的存储过程含有输入输出参数,直接调用会报一个mysql_error错误:XXXXcan't
return a result set in the given context
google了一下这个错误发现有人用以下的代码解决了这个问题:
原文地址:http://www.phpweblog.net/GaRY/archive/2008/01/29/2752.html#Post
关键就是两点
define
(
'
CLIENT_MULTI_RESULTS
'
,
131072
);
$link
=
mysql_connect
(
"
127.0.0.1
"
,
"
root
"
,
""
,
1
,
CLIENT_MULTI_RESULTS) or
die
(
"
Could not connect:
"
.
mysql_error
());
下面就可以正常使用了,以下是例子程序。
1
<?
php
2
define
(
'
CLIENT_MULTI_RESULTS
'
,
131072
);
3
4
$link
=
mysql_connect
(
"
127.0.0.1
"
,
"
root
"
,
""
,
1
,
CLIENT_MULTI_RESULTS) or
die
(
"
Could not connect:
"
.
mysql_error
());
5
mysql_select_db
(
"
vs
"
) or
die
(
"
Could not select database
"
);
6
?>
7
8
<?
php
9
$result
=
mysql_query
(
"
call get_news_from_class_id(2)
"
) or
die
(
"
Query failed:
"
.
mysql_error
());
while
(
$row
=
mysql_fetch_array
(
$result
,
MYSQL_ASSOC))
{
$line
=
'
<tr><td><a target = _blank href=/
''
.$row["url"].
'
/
'
>
'
.
$row
[
"
title
"
]
.
'
(
'
.
$row
[
"
page_time
"
]
.
'
)
'
.
'
</a></td></t
r>
'
;
echo
$line
;
printf
(
"
/n
"
);
}
mysql_free_result
(
$result
);
?>
<?
php
mysql_close
(
$link
);
?>
其中的一个参数CLIENT_MULTI_RESULTS不明白是什么意思,google之,在mysql的官方主页上关于mysql提供的c接口的文档
(http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html)里找到了这个参数
和其他一些参数,我大概翻译了一下描述,如下:
下面有对于
的说明:
If you enable
or
, you should
process the result for every call to
or
by using a loop that calls
to determine whether there are more
results. For an example, see
Section 20.9.12, “C API Support for Multiple
Statement Execution”
.
如果打开了
Section 20.9.12,
“C API Support for Multiple Statement Execution”
以上供需要的朋友参考吧。
转自:http://blog.sina.com.cn/s/blog_550ffb0b0100dybn.html
pro())这样的方式,我认为从本质上也就相当于在mysql命令行里执行语句了,由于我的存储过程含有输入输出参数,直接调用会报一个mysql_error错误:XXXXcan't
return a result set in the given context
google了一下这个错误发现有人用以下的代码解决了这个问题:
原文地址:http://www.phpweblog.net/GaRY/archive/2008/01/29/2752.html#Post
关键就是两点
define
(
'
CLIENT_MULTI_RESULTS
'
,
131072
);
$link
=
mysql_connect
(
"
127.0.0.1
"
,
"
root
"
,
""
,
1
,
CLIENT_MULTI_RESULTS) or
die
(
"
Could not connect:
"
.
mysql_error
());
下面就可以正常使用了,以下是例子程序。
1
<?
php
2
define
(
'
CLIENT_MULTI_RESULTS
'
,
131072
);
3
4
$link
=
mysql_connect
(
"
127.0.0.1
"
,
"
root
"
,
""
,
1
,
CLIENT_MULTI_RESULTS) or
die
(
"
Could not connect:
"
.
mysql_error
());
5
mysql_select_db
(
"
vs
"
) or
die
(
"
Could not select database
"
);
6
?>
7
8
<?
php
9
$result
=
mysql_query
(
"
call get_news_from_class_id(2)
"
) or
die
(
"
Query failed:
"
.
mysql_error
());
while
(
$row
=
mysql_fetch_array
(
$result
,
MYSQL_ASSOC))
{
$line
=
'
<tr><td><a target = _blank href=/
''
.$row["url"].
'
/
'
>
'
.
$row
[
"
title
"
]
.
'
(
'
.
$row
[
"
page_time
"
]
.
'
)
'
.
'
</a></td></t
r>
'
;
echo
$line
;
printf
(
"
/n
"
);
}
mysql_free_result
(
$result
);
?>
<?
php
mysql_close
(
$link
);
?>
其中的一个参数CLIENT_MULTI_RESULTS不明白是什么意思,google之,在mysql的官方主页上关于mysql提供的c接口的文档
(http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html)里找到了这个参数
和其他一些参数,我大概翻译了一下描述,如下:
Flag Name | Flag Description |
CLIENT_COMPRESS | Use compression protocol.(使用压缩协议 。) |
CLIENT_FOUND_ROWS | Return the number of found (matched) rows, not the number of changed rows.(返回找到(匹配)的行数,而不是改变了的行数 。) |
CLIENT_IGNORE_SIGPIPE | Prevents the client library from installing a SIGPIPE signal handler. This can be used to avoid conflicts with a handler that the application has already installed.(阻止客户端库安装一个SIGPIPE信号处理器。这个可以用于当应用程序已经安装该处理器的时候避免与其发生冲突。 ) |
CLIENT_IGNORE_SPACE | Allow spaces after function names. Makes all functions names reserved words.(允许在函数名后使用空格。所有函数名可以预留字 。) |
CLIENT_INTERACTIVE | Allowinteractive_timeout seconds (instead of wait_timeout seconds) of inactivity before closing the connection. The client's session wait_timeout variable is set to the value of the session interactive_timeout variable.(允许使用关闭连接之前的不活动交互超时的描述,而不是等待超时秒数。客户端的会话等待超时变量变为交互超时变量 。) |
CLIENT_LOCAL_FILES | Enable LOAD DATA LOCAL handling. |
CLIENT_MULTI_RESULTS | Tell the server that the client can handle multiple result sets from multiple-statement executions or stored procedures. This flag is automatically enabled if CLIENT_MULTI_STATEMENTS is enabled. See the note following this table for more information about this flag.(通知服务器客户端可以处理由多语句或者存储过程执行生成的多结果集。当打开 CLIENT_MULTI_STATEMENTS时, 这个标志自动的被打开。可以在本表后查看更多关于该标志位的信息。 ) |
CLIENT_MULTI_STATEMENTS | Tell the server that the client may send multiple statements in a single string (separated by “ ; ”). If this flag is not set, multiple-statement execution is disabled. See the note following this table for more information about this flag.(通知服务器客户端可以发送多条语句(由分号分隔)。如果该标志为没有被设置,多条语句执行 。) |
CLIENT_NO_SCHEMA | Don't allow the db_name.tbl_name.col_name syntax. This is for ODBC. It causes the parser to generate an error if you use that syntax, which is useful for trapping bugs in some ODBC programs.(不允许“数据库名.表名.列名”这样的语法。这是对于ODBC的设置。当使用这样的语法时解析器会产生一个错误,这对于一些ODBC的程序限制bug来说是有用的。 ) |
CLIENT_ODBC | Unused.(不使用) |
CLIENT_SSL | Use SSL (encrypted protocol). This option should not be set by application programs; it is set internally in the client library. Instead, use mysql_ssl_set() before calling mysql_real_connect() .(使用SSL。这个设置不应该被应用程序设置,他应该是在客户端库内部是设置的。可以在调用mysql_real_connect()之前调用mysql_ssl_set()来代替设置。 ) |
CLIENT_REMEMBER_OPTIONS | Remember options specified by calls to mysql_options() . Without this option, if mysql_real_connect() fails, you must repeat the mysql_options() calls before trying to connect again. With this option, the mysql_options() calls need not be repeated.(记住通过调用mysql_options()生成的设置。如果不使用这个设置,当mysql_real_connect失败时,再重新连接之前必须反复调用mysql_options()。当然,如果使用这个设置,就不必反复调用了。 ) |
CLIENT_MULTI_STATEMENTS
的说明:
If you enable
CLIENT_MULTI_STATEMENTS
or
CLIENT_MULTI_RESULTS
, you should
process the result for every call to
mysql_query()
or
mysql_real_query()
by using a loop that calls
mysql_next_result()
to determine whether there are more
results. For an example, see
Section 20.9.12, “C API Support for Multiple
Statement Execution”
.
如果打开了
CLIENT_MULTI_STATEMENTS或
CLIENT_MULTI_RESULTS,你必须对每一个mysql_query()或者mysql_real_query()的调用结果通过一个循环来处理,在这个循环中,调用mysql_next_result()来决定(发现)是否有更多的结果,如
Section 20.9.12,
“C API Support for Multiple Statement Execution”
以上供需要的朋友参考吧。
转自:http://blog.sina.com.cn/s/blog_550ffb0b0100dybn.html
相关文章推荐
- php调用mysql存储过程(关于CLIENT_MULTI_RESULTS)
- PHP使用ADODB调用MySQL存储过程
- 关于php应该在何时调用mysql_close()以及pconnect方式和传统方式有何种区别收藏
- php调用mysql 存储过程
- 关于安装php时的libmysqlclient.so.18错误Error 127
- asp.net 调用 mysql 存储过程 MySql.Data.MySqlClient.MySqlException: Unhandled type encountered
- PHP如何调用mysql存储过程
- php用mysql_query()调用存储过程后无法再执行sql报错:commands out of sync you can't run this command now
- php mysql 调用多个存储过程 不关闭连接
- php 调用mysql存储过程
- 关于PHP增删改查里面遇到的Mysql数组调用值为null的问题
- 用 PHP 调用 MySQL 存储过程
- 关于php里面的mysql client API version版本更新
- PHP调用MYSQL存储过程 不报错的解决方法
- php调用mysql存储过程返回多个结果集的处理
- PHP多次调用Mysql存储过程报错解决办法
- mysql创建存储过程并在php中调用
- PHP_PDO 调用mysql 带返回参数的存储过程
- php调用mysql存储过程
- 关于CLIENT_MULTI_RESULTS