Javascript php pdo字符集utf8 mysql:找不到强调字段
我有一张“家庭”桌Javascript php pdo字符集utf8 mysql:找不到强调字段,javascript,php,database,character-encoding,Javascript,Php,Database,Character Encoding,我有一张“家庭”桌 CREATE TABLE famille ( idf INTEGER(6) NOT NULL , >>>>>> nomf VARCHAR(40) NOT NULL, CONSTRAINT pk_famille PRIMARY KEY (idf), >>>>>> CONSTRAINT un_famille_nomf >>
CREATE TABLE famille (
idf INTEGER(6) NOT NULL ,
>>>>>> nomf VARCHAR(40) NOT NULL,
CONSTRAINT pk_famille
PRIMARY KEY (idf),
>>>>>> CONSTRAINT un_famille_nomf
>>>>>> UNIQUE (nomf)
)ENGINE = InnoDB, DEFAULT CHARACTER SET utf8; <<<<<<<<<
我使用异步查询Javascript/Php检查表单中的值,该表单允许添加一个新的“famile”,并且表单中字段“fnom”的值已经存在于表中:当le输入字段没有加重音时,它可以工作,但当有加重音的字符时,它不工作:表单是submit,我得到一个正常的SQL错误
简化表格:
<html><head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta charset="utf-8" /> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<title>Gestion - Administration du site</title>
...
<link rel='stylesheet' href='main.css' type='Text/css'>
<script src="js/checkfamille.js?dev=1574345195"></script>
</head>
<body><h2 class='entete'>Les familles</h2>
...
<form name='frmNewfamille' id='frmNewfamille' method='post' ><fieldset id='fs1'><legend><b>Informations</b></legend><div class='ligne'><span class='label'><label for='fidf'>Identifiant</label></span><span class='champs'>
<input type='number' size='6' minlength='6' maxlength='6' name='fidf' id='fidf' required value='' /></span>
</div><div class='ligne'><span class='label'><label for='fnomf'>Intitulé</label></span><span class='champs'>
<input type='text' size='40' minlength='40' maxlength='40' name='fnomf' id='fnomf' required value='' /></span></div></fieldset><fieldset>
<input type="hidden" id="valide" name="valide" hidden />
<input class='bouton' type='button' name='btnNewAfamille' id='btnNewAfamille' value='Ajouter'
onclick='return checkfamille();' />
>>>>>>>>>>>>>>>>>>>^^^^^^^^^^^
</fieldset>
</form>
...
下面是查询错误:
Erreur SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
entry 'Rosacées' for key 'un_famille_nomf'
我查过了
-所有源文件:utf8 OK
-数据库数据
-php/mysql连接参数和代码:
define("DB_HOST", "localhost");
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");
define("DB_NAME", "xxxx");
define("DB_CHARSET", "utf8");
和一个数据库类:
class Database
{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $charset = DB_CHARSET;
private $dbh;
private $error;
private $stmt;
public function __construct(){
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname. ';charset=' . $this->charset;
// Options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
);
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
$this->dbh->exec("SET NAMES utf8;");
}
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
...
我会错过什么吗
谢谢你的帮助
****编辑****
写了这条消息之后,我想知道它是否来自PHP异步PHP代码调用中的escape(nomf.value)。。。我删除了“逃逸”这个词,它就行了
return checkFamilleAjax('code.php?idf='+idf.value
+'&nomf='+nomf.value
+'&mode=insert');
Javascript“转义”将字符(例如accuentuated)更改为十六进制值:(从*更改*从法语参考更改为英语参考)
此函数已过时,必要时应使用“encodeURI”和“encodeURIComponent”。检查是否所有文件(JS/HTML)都已编码/保存为UTF-8。也许只有一个不是,并且导致了编码问题。还要检查UTF-8是否嵌入了(BOM)字节顺序标记。是的,我已检查了所有文件。问题来自于使用“encode”Javascript函数将重音字符转换为十六进制。我把它拿走了,一切都好。您可以在文章的编辑部分看到。谢谢。我怎样才能把这篇文章标记为已解决?谢谢你,如果管理员可以这样做,并删除此评论。嗯…,如何将其标记为已解决。我知道你说过你删除了有问题的函数调用,但从某种程度上说,这并不能完全解决问题。我会让你决定怎么做。我很高兴你能继续。
Erreur SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate
entry 'Rosacées' for key 'un_famille_nomf'
define("DB_HOST", "localhost");
define("DB_USER", "xxxx");
define("DB_PASS", "xxxx");
define("DB_NAME", "xxxx");
define("DB_CHARSET", "utf8");
class Database
{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $charset = DB_CHARSET;
private $dbh;
private $error;
private $stmt;
public function __construct(){
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname. ';charset=' . $this->charset;
// Options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"
);
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
$this->dbh->exec("SET NAMES utf8;");
}
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
...
return checkFamilleAjax('code.php?idf='+idf.value
+'&nomf='+nomf.value
+'&mode=insert');
escape("abc123"); // "abc123"
escape("äöü"); // "%E4%F6%FC"
escape("ć"); // "%u0107"