2016-04-21 46 views
0

我有一个PHP页面,可以将一些数据保存到我的数据库。它适用于所有具有特殊字符(。,?!)的字符串,但不适用于撇号(')。PHP:不保存撇号

这是我的PHP:

$message = trim(strip_tags($_REQUEST['message'])); 
$safe_variable = mysqli::escape_string($message); 

$i_sql = "INSERT INTO tableName (id_user, username, message) VALUES ('".$id_user."', '".$username."', '".$safe_variable."')"; 
$i_res = mssql_query($i_sql); 

我一直有和没有这一行尝试:

$safe_variable = mysqli::escape_string($message); 

我读过,我应该使用mysql_real_escape_string,但它不再支持我应该使用mysqli::escape_string

我在做什么错在我的PHP或我应该用什么来保存撇号?

注:

$messageI'm当我测试。

+0

你不应该手动逃脱。使用占位符+准备好的语句 –

+2

看起来您正在为MSSQL服务器使用MySQL报价转义函数。那些是两个**完全**不同的数据库引擎。 MySQL用\'转义单引号,而MSSQL用''转义单引号。你不能混合和匹配那样的功能。 – kainaw

+1

您应该切换到PDO并准备好语句。这样你就不必担心斜杠。 – LSerni

回答

2

escape_string()不能与mysqli::escape_string($message)

此外mssql_query($i_sql);静态调用没有任何意义在这里,因为它看起来像使用MySQL作为数据库your're。

的代码可以固定这样的:

// This is the object that represent the connection to the db 
$conn = new mysqli('localhost', 'user', 'password', 'db_name'); 

$message = trim(strip_tags($_REQUEST['message'])); 
$safe_variable = $conn->escape_string($message); // fixed here 

$i_sql = "INSERT INTO tableName (id_user, username, message) VALUES ('".$id_user."', '".$username."', '".$safe_variable."')"; 
$i_res = $conn->query($i_sql); // fixed here 

以上,当然,假设你使用MySQL数据库。

无论如何,我强烈建议使用准备的语句,而不是转义字符串。