Ajax 和 MySQL 的特殊字符
Special characters with Ajax and MySQL
我有一个使用默认字符集 UTF8 编码的 MySQL 数据库。我还有一个 PHP 代码,使用相同的字符集 meta charset="UTF-8"
.
编码
我的数据库连接也配置为使用 UTF8
new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
但是当我使用Ajax获取文本框的内容并将其插入数据库时出现问题。
如果我不使用特殊字符,它工作正常,但当我使用引号或其他东西时,一切都停止工作。
我尝试使用 UTF8_encode and UTF8_decode 但没有任何改变
编辑
PHP
...
<meta charset="UTF-8">
...
<textarea class="commentBox" id="<?php echo $id_case;?>"></textarea>
<button class="saveComment" id="<?php echo $id_case;?>"> Save comment </button>
//id_case is different for each textarea
Javascript
$('.saveComment').click(function()
{
var idComment = this.id;
var content = $('#'+idComment+'.commentBox').val();
add_comment(idComment, content);
});
function add_comment(case_id, content)
{
$.post("../functions/ajax/add_comment.php",
{
id_case: case_id,
content: content
},
function(data,status)
{
alert("It worked !");
console.log("Function add_comment : "+status);
});
}
add_comment.php
<?php
if(isset($_POST['id_case'], $_POST['content']))
{
$case = $_POST['id_case'];
$content = $_POST['content'];
}
else
{
echo "Error during sending data to [add_comment.php]";
}
if($db != null)
{
try
{
$sql = ("UPDATE cases SET progress_remarks = '$content' WHERE id_cases = $case");
$result = $db->exec($sql);
echo $content;
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
}
else echo "Erreur interne (fill_progress.php)";
?>
我的数据库连接是在别处完成的,但看起来像这样
$this->con = new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
when I use a quote or something everything stops working.
不清楚问题是 (1) 只是一个转义问题,还是 (2) 也是一个 utf8 问题。
因为 PDO 有一个内置的方法来处理转义,使用它:
$sql = ("UPDATE cases SET progress_remarks = ? WHERE id_cases = $case");
$result = $db->exec($sql, $content);
这可能是使用 PDO 设置字符集的首选方式:$db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd);
meta charset="UTF-8"
指的是 HTML 中的标签,而不是 PHP 或 MySQL.
SHOW CREATE TABLE
-- 是否声明了相关列 CHARACTER SET utf8
?
我有一个使用默认字符集 UTF8 编码的 MySQL 数据库。我还有一个 PHP 代码,使用相同的字符集 meta charset="UTF-8"
.
我的数据库连接也配置为使用 UTF8
new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
但是当我使用Ajax获取文本框的内容并将其插入数据库时出现问题。
如果我不使用特殊字符,它工作正常,但当我使用引号或其他东西时,一切都停止工作。
我尝试使用 UTF8_encode and UTF8_decode 但没有任何改变
编辑
PHP
...
<meta charset="UTF-8">
...
<textarea class="commentBox" id="<?php echo $id_case;?>"></textarea>
<button class="saveComment" id="<?php echo $id_case;?>"> Save comment </button>
//id_case is different for each textarea
Javascript
$('.saveComment').click(function()
{
var idComment = this.id;
var content = $('#'+idComment+'.commentBox').val();
add_comment(idComment, content);
});
function add_comment(case_id, content)
{
$.post("../functions/ajax/add_comment.php",
{
id_case: case_id,
content: content
},
function(data,status)
{
alert("It worked !");
console.log("Function add_comment : "+status);
});
}
add_comment.php
<?php
if(isset($_POST['id_case'], $_POST['content']))
{
$case = $_POST['id_case'];
$content = $_POST['content'];
}
else
{
echo "Error during sending data to [add_comment.php]";
}
if($db != null)
{
try
{
$sql = ("UPDATE cases SET progress_remarks = '$content' WHERE id_cases = $case");
$result = $db->exec($sql);
echo $content;
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
}
else echo "Erreur interne (fill_progress.php)";
?>
我的数据库连接是在别处完成的,但看起来像这样
$this->con = new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
when I use a quote or something everything stops working.
不清楚问题是 (1) 只是一个转义问题,还是 (2) 也是一个 utf8 问题。
因为 PDO 有一个内置的方法来处理转义,使用它:
$sql = ("UPDATE cases SET progress_remarks = ? WHERE id_cases = $case");
$result = $db->exec($sql, $content);
这可能是使用 PDO 设置字符集的首选方式:$db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd);
meta charset="UTF-8"
指的是 HTML 中的标签,而不是 PHP 或 MySQL.
SHOW CREATE TABLE
-- 是否声明了相关列 CHARACTER SET utf8
?