Maison  >  Questions et réponses  >  le corps du texte

Lorsque mysqli appelle une procédure stockée, le mysql entrant est toujours tronqué. (Vous trouverez ci-joint le processus de fonctionnement, les détails et les captures d'écran)

Scénario métier : La page php appelle la procédure stockée mysql, qui a 1 paramètre d'entrée et 1 paramètre de sortie.
Un problème est survenu : il peut être exécuté normalement, mais après avoir entré les paramètres dans la base de données, des caractères tronqués sont toujours affichés.

Le code de la page PHP est le suivant

<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>


Le code de la procédure stockée mysql est le suivant

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

Dans la base de données mysql, l'option de la table de test est "utf8/utf8_ganaral_ci", et le jeu de caractères et le tri l'ordre du champ interne info_name_cn de la table de test est "utf8/ utf8_ganaral_ci"

J'ai essayé différentes méthodes de conversion - le texte suivant
mais les résultats étaient tous tronqués - les résultats après exécution sont les suivants

(id est) 29 : Non converti
//$info_name_cn=mb_convert_encoding($info_name_cn,' UTF-8');

(id is)30 : Convertir en UTF-8
$info_name_cn=mb_convert_encoding($info_name_cn,'UTF-8');

(id is)31 : Convertir en GB2312
$info_name_cn= mb_convert_encoding($info_name_cn,'GBK');

(id is)32 : Convertir en GBK
$info_name_cn=mb_convert_encoding($info_name_cn,'GBK');

(id is)33 : Convertir en BIG5
$info_name_cn= mb_convert_encoding($info_name_cn,'ASCII');

(id is)34 : Convertir en ASCII
$info_name_cn=mb_convert_encoding($info_name_cn,'ASCII');

1.png


De plus, l'exécution du code suivant peut fonctionner normalement. Ajouter le chinois à la base de données

<?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 Il y a quelques jours1101

répondre à tous(3)je répondrai

  • innocence

    innocence2019-07-27 11:41:55

    *Problème d'encodage du fichier .php

    répondre
    1
  • **越狱兔

    Oui, merci beaucoup. C'est fait maintenant. J'ai l'impression qu'il utilise directement Notepad++ pour copier et coller, ce qui provoque des problèmes d'encodage dans le fichier .php. Je laisserai le processus de fonctionnement pour ce qui viendra plus tard (je suis un novice, cela ne vous dérange pas si vous êtes un maître) 1. Créez un nouveau fichier abc.txt, enregistrez le fichier au format utf8, changez le nom en abc.php et ouvrez-le. 2. Ouvrez le code précédemment écrit dans le bloc-notes txt, copiez-le et collez-le dans le fichier abc.php. Sauver et fermer. 3. Utilisez le logiciel Notepad++ pour ouvrir abc.php, et sélectionnez UTF-8 pour l'élément "Encodage" (pour éviter les en-têtes de nomenclature).

    **越狱兔 · 2019-07-27 15:12:50
  • **越狱兔

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

    Supplément : dans la même situation, j'ai modifié la méthode de codage d'enregistrement des fichiers en ASCI et le code de la page s'est exécuté normalement après l'avoir défini sur GBK.

    répondre
    0
  • Annulerrépondre