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)
**越狱兔
**越狱兔 2019-07-22 15:35:41
0
3
1187

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

**越狱兔
**越狱兔

répondre à tous(2)
innocence

*Problème d'encodage du fichier .php

  • répondre 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).
    **越狱兔 auteur 2019-07-27 15:12:50
流氓越狱兔

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal