mysqli调用存储过程,传入mysql总是乱码。(附操作过程、细节、截图)
**越狱兔
**越狱兔 2019-07-22 15:35:41
0
3
1144

业务场景:php页面调用mysql存储过程,有1个入参,1个出参。
出现问题:能正常执行,但入参到数据库后总是显示乱码。

PHP页面代码如下

<head>
<meta charset="utf-8">
</head>
<?php
$conn = new MySQLi("数据库地址","数据库用户","密码","数据库名");
mysqli_query($conn,"SET NAMES utf8");
$info_name_cn='测试x201';
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');
$result=$conn->query("CALL x2('$info_name_cn',@exeout_rows)");
$result=$conn->query("SELECT @exeout_rows");
$recordset=mysqli_fetch_assoc($result);
$exeout_rows=(int)$recordset["@exeout_rows"];
?>
<div>---|<?php echo $exeout_rows; ?>|<?php echo mb_detect_encoding($exeout_rows); ?>|---</div>


mysql存储过程代码如下

CREATE DEFINER=`数据库名`@`%` PROCEDURE `x2`(
IN exein_info_name_cn VARCHAR(5)
,OUT exeout_rows int
)
BEGIN
        set exeout_rows=1;
         
        insert into 测试表
        (
        info_name_cn
        )
        values
        (
        exein_info_name_cn
        );
END

mysql数据库中,测试表的选项为"utf8/utf8_ganaral_ci",测试表内部字段info_name_cn的字符集和排序顺序为"utf8/utf8_ganaral_ci"

我尝试不同转换不同编码方式——如下文字
但是结果都是乱码——执行后结果如下图片

(id为)29:不转换
//$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');

(id为)30:转换为UTF-8
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');

(id为)31:转换为GB2312
$info_name_cn=mb_convert_encoding($info_name_cn,'GB2312');

(id为)32:转换为GBK
$info_name_cn=mb_convert_encoding($info_name_cn,'GBK');

(id为)33:转换为BIG5
$info_name_cn=mb_convert_encoding($info_name_cn,'BIG5');

(id为)34:转换为ASCII
$info_name_cn=mb_convert_encoding($info_name_cn,'ASCII');

1.png


另外,运行以下代码可以正常往数据库添加中文

<?php
$link = @mysql_connect("数据库地址","数据库用户名","数据库密码")
or die("连接失败" .mysql_error());
@mysql_select_db("数据表") or die("连接失败".mysql_error);
function insert(){
mysql_query("set names utf8");
$sqlinsert = "insert into 测试表(info_name_cn) values('李四')";
$resultinsert = mysql_query($sqlinsert);
if($resultinsert){
echo "insert data success";
}else{
echo "insert data fail".mysql_error();
}
}
insert();
mysql_close($link);
?>

2.png

**越狱兔
**越狱兔

全部回复(2)
innocence

*.php文件编码问题

  • 回复 对,非常感谢。现在已经搞定了。 我感觉是直接使用Notepad++复制粘贴,造成.php文件内编码问题。 操作过程留一下给后面的东西吧(我是菜鸡,大神请不要介意) 1、新建abc.txt文件,文件另存为utf8格式,修改名字为abc.php打开。 2、将以前写过的代码,以txt记事本打开,复制,粘贴到abc.php文件中。保存关闭。 3、用软件Notepad++打开abc.php,“编码”项选择UTF-8(避免出现BOM头)。
    **越狱兔 作者 2019-07-27 15:12:50
流氓越狱兔

补充:同样情况下,我将文件保存编码方式改为ASCI,页面代码设置为GBK后运行正常。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!