Mysql向存储过程中传递中文参数变成乱码的解决方案

今天做程序需要用到一个存储过程,然后用php程序调用。存储过程如下:delimiter $$CREATE PROCEDURE disagree_upgrade_detail(a int,b text)BEGINSET NAMES utf8;UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a;INSERT INTO `disagree_u

今天做程序需要用到一个存储过程,然后用php程序调用。
存储过程如下:

delimiter $$
CREATE PROCEDURE disagree_upgrade_detail(a int,b text)
BEGIN
SET NAMES ‘utf8′;
UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a;
INSERT INTO `disagree_upgrade_detail` SELECT * from `upgrade_detail` WHERE `id`=a;
DELETE FROM `upgrade_detail` WHERE `id`=a;
END;
$$

PHP的调用代码片段如下:
mysql_query(“CALL disagree_upgrade_detail({$which},'{$why}’);”);
后来在跑程序的时候发现一个问题。
由于$why这个变量的值是大部分情况存在中文,在传递给存储过程后,变成了带有?的乱码。在此之后我检查了php、数据库的编码已经统一,搞了很久还是一筹莫展。
最后我在http://topic.csdn.net/u/20070703/09/fbceeb45-1c8d-4009-ac84-cabe9fc315d7.html中找到了答案。对其进行了如下修改

delimiter $$
CREATE PROCEDURE disagree_upgrade_detail(a int,b varchar(4000))
BEGIN

UPDATE `upgrade_detail` SET `disagree_description`=b WHERE `id`=a;
INSERT INTO `disagree_upgrade_detail` SELECT * from `upgrade_detail` WHERE `id`=a;
DELETE FROM `upgrade_detail` WHERE `id`=a;
END;
$$

PHP的调用代码片段如下:
mysql_query(“CALL disagree_upgrade_detail({$which},'{$why}’);”);
需要注意的代码已经标绿。在创建存储过程的时候,。

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部