Php 如何在MySQL数据库中存储包含引号的字符串?

Php 如何在MySQL数据库中存储包含引号的字符串?,php,sql,mysql,Php,Sql,Mysql,我有下表: $sql = "CREATE TABLE received_queries ( sender_screen_name varchar(50), text varchar(150) )"; 我使用以下SQL语句在表中存储值 $sql = "INSERT INTO received_queries VALUES ('$sender_screen_name', '$text')"; 现在我尝试将以下字符串存储为“text” 还有一首俳句:记住棉花;感

我有下表:

$sql = "CREATE TABLE received_queries
    (
     sender_screen_name varchar(50),
     text varchar(150)
    )";
我使用以下SQL语句在表中存储值

$sql = "INSERT INTO received_queries VALUES ('$sender_screen_name', '$text')";
现在我尝试将以下字符串存储为“text”

还有一首俳句:记住棉花;感觉像睡觉一样无法治愈; 我需要一些咖啡

我得到以下错误消息:

错误:您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 几乎无法治愈;我需要一些咖啡。”)“在1号线


我认为这一定是一个相当普遍的问题。我该怎么解决呢?

您可以转义单引号
\'
。看


您可以使用
mysql\u real\u escape\u string

我建议使用准备好的语句(使用mysqli或pdo)而不是escape。

您永远不应该通过将字符串与用户输入连接来构建SQL。这会使您的应用程序面临SQL注入攻击(想象一下,当有人进入
”时会发生什么);从收到的查询中删除
$text


所以,您应该始终使用DB框架(比如PHP),它允许您传递带有占位符的字符串,然后传递带有值的数组。然后,该框架将确保这些值不会造成任何损害。

请注意,组合这样的SQL查询会带来潜在的安全风险。

更好的方法是使用准备好的语句。这基本上意味着将某些占位符放在SQL中,实际值(如
$sender\u screen\u name
$text
)将被放入其中

我搜索了“net”,找到了以下代码片段,展示了如何用PHP编写语句(很抱歉,如果这不是最好的PHP,我通常不会用这种语言编写任何程序,但我想它可以作为一个合理的起点):


通过将查询作为准备好的语句执行,您不必担心自己会转义字符串。PHP和RDBMS将自动为您处理此问题。

@Oded:是否有其他字符会造成类似问题?显然,我再也看不到超链接:)编辑您的评论以使其最新。PHP和RDBMS不会自动处理转义,因为在本例中不使用转义。
One more #haiku: Cotton wool in mind; feeling like a sleep won\'t cure; I need some coffee.
$dbSelect = $objDb->prepare("INSERT INTO received_queries VALUES (:ssn, :text");

$dbSelect->bindParam('ssn', $sender_screen_name);
$dbSelect->bindParam('text', $text);