我有一个使用默认字符集UTF8编码的MySQL数据库。我还有一个用相同的字符集meta charset="UTF-8"
编码的PHP代码。
我与数据库的连接也配置为使用UTF8
new PDO("mysql:host=" .$host. ";dbname=".$database,$username,$password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
但是当我使用 Ajax 来获取文本框的内容并将其插入数据库时,我遇到了问题。
如果我不使用特殊字符,它可以正常工作,但是当我使用引号或其他东西时,一切都停止工作。
我尝试使用UTF8_encode和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"));
答案 0 :(得分:0)
当我使用引用或其他东西时,一切都停止了。
目前尚不清楚问题是(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
?