在PHP for SQL Management studio中使用单引号时,如何添加单引号
我在SQL Management studio中遇到问题,我不想连接到此SQL server我想准备好数据,以便将我的行插入此数据库 我有一个文本文件,其中包含要插入sql server的字符串行。行如下所示:在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 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不能用斜杠来逃避。