Обсуждение статьи тематического каталога: Формирование запросов к MsSQL из PHP. (win sql php)Ссылка на текст статьи: http://www.opennet.me/base/dev/mssql_php_slash.txt.html
В результате боевых испытаний на рабочем сайте выявлены ошибки.
Не удваивает одиночную кавычку в начале и в конце слова/фразы, которое надо вставить в запрос.
Пример:
INSERT INTO dbo.USERS (UserName,) VALUES (''yukko')
либо
INSERT INTO dbo.USERS (UserName,) VALUES ('yukko'')Рег будет переписываться.
Вот собственно новая редакция рега:
<?
$some_string = "
SET @idins = REPLACE(CONVERT(nvarchar(50), @myid), '-rrr'','dfj'njd' ) SET @userid = (SELECT ID FROM dbo.USERS WHERE (UserName = 'yuk'ko'))
";
$string = preg_replace("/(?<=[\(=,]|<>)\s*('.*?')(?=\s*[,\\x29]|\s+where|\s*$|\s+and|\s+or)/sie","my_func('\\0')",$some_string);
echo nl2br($string);
function my_func($string)
{
$start = strpos($string,"'");
$end = strrpos($string, "'");
$begin = substr($string, 0, $start+1);
$finish = substr($string, $end);
$middle = substr($string, $start+1,$end-$start-1);
$string = $begin.str_replace("'","''", $middle).$finish;
return($string);
}
?>
А чего не сделать проще ?
<?php
$query = "'yuk''ko''10'";
echo $query;
echo '
';
$query = preg_replace("/'/","''",$query);
echo $query;
echo '
';
$sql = "INSERT INTO dbo.USERS (UserName,) VALUES ('".$query."')";
echo $sql;
?>