PHP和MySQL特殊字符错误

时间:2017-03-04 12:08:56

标签: php mysql utf-8

我正在尝试制作一个完美无缺的文章海报,直到我在html表单中添加特殊字符(如;,!等)。我用Google搜索并找到了关于表格排序的信息(默认为utf8_unicode_ci)。

连接到数据库后,我在头文件<meta charset="utf-8">中有mysqli_set_charset($conn, 'utf8')。该表单还具有accept-charset="utf-8"属性。

以下是发送表单后发生的事情:

if(isset($_POST['sendForm']))
{
    $articleTitle = $_POST['title'];
    $articleText = $_POST['text'];
    $name = $_SESSION['name'];

    $currentDateMySQL = date("Y.m.d");

    $sql = "INSERT INTO articles (title, text, owner, date_added) VALUES ('$articleTitle', '$articleText', '$name', '$currentDateMySQL')";
$result = mysqli_query($conn, $sql);

    if($result === false)
    {
        $color = "red";
        $infoText = "Could not insert your information into the database. Error number: <b>" . mysqli_errno($conn) . "</b>. :( Try again.";
    }
    else
    {
        $color = "green";
        $infoText = "Succesfully writen the article into the database. :)";
    }
}

此外,给定的错误编号为1064。 SQL代码中没有错误,没有特殊字符就可以正常工作。

2 个答案:

答案 0 :(得分:2)

您需要将尝试插入数据库的每个输入都转义,否则您将面临SQL注入攻击的风险:

$articleText = mysql_real_escape_string($articleText);

此外,您不应再直接使用本机sql,不推荐使用它。你应该使用预备语句。

答案 1 :(得分:1)

如果您在创建后更改了表格排序规则,则表示您的列排序规则不匹配。

以下所有字符集都应匹配,以便正确插入数据:

  • 列charset collat​​ion
  • 连接字符集

更好的是,到处都有相同的字符集:

  • defaut charset
  • 数据库字符集
  • table charset
  • column charset
  • 连接字符集