The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Формирование запросов к MsSQL из PHP. (win sql php)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: win, sql, php,  (найти похожие документы)
From: Yukko <yukko#bigmir.net> Newsgroups: email Date: Mon, 1 Sep 2003 14:31:37 +0000 (UTC) Subject: Формирование запросов к MsSQL из PHP. Для работы с MySQL в PHP есть функция addslashes(), которая обрабатывает sql запрос (другую подобную строку), ставя перед ",',NULL, \ обратный слэш \ НО! Если есть необходимость сделать тоже самое под MsSQL, Oracle (не проверено, но стоит попробовать, там такие же требования к запросам!) то надо поступать по-другому, потому чтобы вставить в MsSQL одиночную кавычку, надо ее удвоить. MsSQL принимает запросы в виде: INSERT INTO dbo.USERS (UserName,) VALUES ('yukko10') Т.е. строки обрамляются одиночными кавычками. Чтобы вместо yukko10 вставить yukko's10 надо удвоить кавычку и написать: INSERT INTO dbo.USERS (UserName,) VALUES ('yukko''10') Лень! Да и к тому же все входящие данные, которые пойдут в БД, надо обработать на предемет присутсвия одиночной кавычки. Автоматизируем процесс! Код: $query = "INSERT INTO dbo.USERS (UserName,) VALUES ('yukko'10')"; $query = preg_replace("/(?<=')([a-zA-Z0-9 ]+(')(?:[a-zA-Z0-9 *]?')*[a-zA-Z0-9 ]+)(?='[a-zA-Z0-9 ]+=| *$|)/e","str_replace( \"'\" ,\"''\",'\\1')",$query); echo $query; Выведет: INSERT INTO dbo.USERS (UserName,) VALUES ('yukko''10') Соответственно на строку INSERT INTO dbo.USERS (UserName,) VALUES ('yukko''10') Выведет: INSERT INTO dbo.USERS (UserName,) VALUES ('yukko''''10') Четыре кавычки внутри и по одной снаружи слова yukko''10, чтобы отделить строку в sql запросе. Прошу тестировать и присылать ошибки и исправления!

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, Yukko (?), 16:36, 19/11/2003 [ответить]  
  • +/
    В результате боевых испытаний на рабочем сайте выявлены ошибки.
    Не удваивает одиночную кавычку в начале и в конце слова/фразы, которое надо вставить в запрос.
    Пример:
    INSERT INTO dbo.USERS (UserName,) VALUES (''yukko')
    либо
    INSERT INTO dbo.USERS (UserName,) VALUES ('yukko'')

    Рег будет переписываться.

     
  • 2, Yukko (?), 11:59, 13/01/2004 [ответить]  
  • +/
    Вот собственно новая редакция рега:
    <?
    $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);
         }
    ?>
     
     
  • 3, anonim (?), 18:56, 22/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А чего не сделать проще ?
    <?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;
    ?>
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру