繁体   English   中英

将数据插入mysql时出现PHP字符集问题

[英]PHP charset issue while inserting data to mysql

我有一个PHP文件,在数据库中插入$ mail和$ password。 请参见下面的代码。 我的php文件,我的BD和我的表格字段位于utf-8中。 因此,我不明白的是,为什么我发送的“Philémon”邮件在表中显示为“Philémon”。 顺便说一下,我知道这不是邮件格式。 只是为了测试。

我的PHP:

<?php
header('Content-Type: text/html; charset=utf-8');
require("php/connect.inc.php");

$mail = mysql_real_escape_string("Philémon");
$password = sha1("pass123");

mysql_query("INSERT INTO ENS_MEMBRES (ENS_MAIL, ENS_PASS) VALUES ('$mail','$password')");
?>

您的PHP源代码可能是UTF-8编码的; 您的数据库连接可能是ISO-8859-1编码的,它是mySQL的默认连接编码。 这将导致UTF- é被解释为两个单独的字节,并以这种方式存储在mySQL表中。

解决方法:做一个

 mysql_set_charset('utf8'); 

发送数据之前; 如果该功能不可用,请使用

mysql_query("SET NAMES utf8;");

对于当前遇到此问题的用户, mysql_query在PHP 5.5.0中已弃用,而在PHP 7.0.0中已将其删除,而可以使用mysqli_query(procedural)或PDO( 请参阅php文档 )。 要为实施程序扩展的用户解决此问题,请尝试以下操作

$conn = mysqli_connect('host', 'user', 'password', 'dbname');
mysqli_set_charset($conn,"utf8");

这对我来说很完美!

对于实施PDO扩展的用户,请尝试以下操作

$pdo = new PDO(
    ''mysql:host=host;dbname=urdbname'',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

希望这可以帮助某人;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM