>  Q&A  >  본문

mysqli가 저장 프로시저를 호출하면 들어오는 mysql이 항상 왜곡됩니다. (작업과정, 세부정보, 스크린샷 첨부합니다)

비즈니스 시나리오: PHP 페이지는 1개의 입력 매개변수와 1개의 출력 매개변수가 있는 mysql 저장 프로시저를 호출합니다.
문제가 발생했습니다. 정상적으로 실행이 되지만, 데이터베이스에 매개변수를 입력하면 항상 문자가 깨져서 표시됩니다.

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 is) 29: 변환되지 않음
//$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');

(id is)30: UTF-8로 변환
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');

(id is)31: GB2312로 변환
$info_name_cn= mb_convert_encoding($info_name_cn,'GBK');

(id is)32: GBK로 변환
$info_name_cn=mb_convert_encoding($info_name_cn,'GBK');

(id is)33: BIG5로 변환
$info_name_cn= mb_convert_encoding($info_name_cn,'ASCII');

(id is)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

**越狱兔**越狱兔1890일 전1105

모든 응답(3)나는 대답할 것이다

  • innocence

    innocence2019-07-27 11:41:55

    *.php 파일 인코딩 문제

    회신하다
    1
  • **越狱兔

    네, 정말 감사합니다. 이제 끝났습니다. 복사 및 붙여넣기 작업에 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
  • **越狱兔

    **越狱兔2019-07-22 17:03:00

    보충: 같은 상황에서 파일 저장 인코딩 방식을 ASCI로 변경하였고, 페이지 코드는 GBK로 설정 후 정상적으로 실행되었습니다.

    회신하다
    0
  • 취소회신하다