在PHP for SQL Management studio中使用单引号时,如何添加单引号

在PHP for SQL Management studio中使用单引号时,如何添加单引号,php,sql-server,regex,Php,Sql Server,Regex,我在SQL Management studio中遇到问题,我不想连接到此SQL server我想准备好数据,以便将我的行插入此数据库 我有一个文本文件,其中包含要插入sql server的字符串行。行如下所示: 你做错了!!,迈克·沃尔什,中级 因此,为sql server做好准备应该是这样的 你做错了!!,迈克·沃尔什,中级 我还有以下几行: 再也不用说“求救!!!” 这会成为一个问题吗?我也应该有什么计划吗 我尝试使用addslash,然后通过以下操作将斜杠替换为单引号: $str=",

我在SQL Management studio中遇到问题,我不想连接到此SQL server我想准备好数据,以便将我的行插入此数据库 我有一个文本文件,其中包含要插入sql server的字符串行。行如下所示:

你做错了!!,迈克·沃尔什,中级

因此,为sql server做好准备应该是这样的

你做错了!!,迈克·沃尔什,中级

我还有以下几行:

再也不用说“求救!!!”

这会成为一个问题吗?我也应该有什么计划吗

我尝试使用addslash,然后通过以下操作将斜杠替换为单引号:

  $str=",('".addslashes ($array[0])."')";
     $str=str_replace("\\","\'",$str);
     echo $str;
我在sql server中插入查询时使用了逗号和括号 这一次的结果将是:

    ,('You\''re Doing It Wrong!!'),
,('Never Have to Say \'"Mayday!!!\'" Again'),

我在这里做错了什么?

您以错误的方式处理此问题:与其准备将字符串“粘贴”到SQL Server的查询中,不如将SQL参数化,并将字符串作为参数传递。这样,您根本不必转义,引号或其他特殊字符的数量也无关紧要:

$sql = "INSERT INTO MyTable(id,name) VALUES (?,?)"
$params = array($someId, $name)
$sql_srv_query($db_conn, $sql, $params);
可以试试这个吗

$str = "You're Doing \"It Wrong!!,Mike Walsh,Intermediate";
$st = addslashes($str);

首先,您可以将“替换为\”,然后使用准备好的语句生成
addslashes

是最好的方法。如果您坚持使用正则表达式方式,则可以使用
preg\u replace
将单引号加倍,以使后续单引号的数量达到偶数:

''|(')
并替换为
''
。看

PHP代码示例:

$re = "/''|(')/"; 
$str = "You're Doing It Wrong!!,'''Mike Walsh'',Intermediate"; 
$subst = "''"; 
$result = preg_replace($re, $subst, $str);
输出:

You''re Doing It Wrong!!,''''Mike Walsh'',Intermediate

使用准备好的语句插入数据。我没有使用mysql,我只是准备好要插入sql Server的行。我的评论没有提到mysql。使用PDO驱动程序,用准备好的语句插入数据,查询与数据分离。问题是:您想知道哪些字符需要转义,还是在regexp创建它们时遇到问题?对于转义序列,您可能会看到。我不想这样做,它不是一个巨大的数据,而且如果我甚至想我不能数据库是远程的,我不能使用sql server,我有远程访问,我不能做其他way@Nickparsa参数化查询的好处在于它非常可靠。您应该尝试在文件上使用prepared语句,除非它是一次性作业。在生成“罐装”SQL时丢失一个角落案例可能会造成极大的成本,特别是如果有人恶意且对您的脚本有很好的了解,可以访问您的源文本文件。这其实不是一个严重的问题,这只是一个项目,我们的教授给我们发送了一些非常糟糕的excel表格格式的数据,有很多打字错误和错误的东西,它甚至与项目无关,我们应该只有这些数据。Mssql不能用斜杠来逃避。