2017-03-04 84 views
0

我试图制作完美的作品,直到我在html表单中加入特殊字符(如;,!等)。我搜索了一下,发现了一些关于表格整理的内容(默认为utf8_unicode_ci)。PHP和MySQL特殊字符错误

我有<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

你需要做的逃避你试图插入到数据库中,否则你冒着SQL注入攻击,每个输入:

$articleText = mysql_real_escape_string($articleText); 

而且你不应该使用本地SQL直接了,它已经过时了。您应该使用准备好的语句。

+0

它避开了特殊字符 – Sepultura

+0

我使用mysqli的不是MySQL,但我不使用PDO –

+0

谢谢你!这就是我在注册时所做的。我忘了。再次感谢你! –

1

如果您在创建后更改了表格归类,并不意味着您的列归类确实匹配。

以下所有字符集的应该匹配,使您的数据是否正确插入:

  • 列字符集整理
  • 连接字符集

更妙的是,有相同的字符集无处不在:

  • defaut charset
  • 数据库字符集
  • 表字符集
  • 列字符集
  • 连接字符集
+0

谢谢,但答案是使用'mysqli_real_escape_string'。 :) –