Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Различие между mysql_real_escape_string и mysql_escape_string

Добрый день всем.
Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/1.0.1c PHP/5.5.9

Решил скачать БД через dumper (сайпекс)
Выдало ошибку mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. (8192)
Нашел строчку

PHP
1
$row[$k] = isset($row[$k]) ? "'" . mysql_escape_string($row[$k]) . "'" : "NULL";
заменил на
PHP
1
$row[$k] = isset($row[$k]) ? "'" . mysql_real_escape_string($row[$k]) . "'" : "NULL";
Сработало на локалке, на хостах будет ли работать при новых php версия?
Ошибки не будет при использовании этой функции? В чем существенное различие их?

mysql_real_escape_string и mysql_escape_string

Мануал читал - нужно своими словами.
Спасибо.
Ответ:
Сообщение от Царь Бабай
Мануал читал - нужно своими словами.
Второй вариант учитывает кодировку соединения - первый нет. Второй вариант работает только после подключения к БД - первый нет. Второй вариант надежней.

Не по теме:

А про то что на новых версиях работать не будет - так они обе скоро будут удалены из PHP. Одинаково. Просто вторая вышла позже первой, и получается первая "устарела" раньше

Вопрос: Ошибка 'wcscat': This function or variable may be unsafe

Сколько мне ещё раз к вам придётся обратиться я даже не представляю ))
Ну пока у меня малы успехи в нахождении ошибок, поможете ?! может подскажите как правильно линк подключать ?
Спасибо ! Компилятор у меня Visual Studio 2012 Ultimate это хороший вообще?

//ОКОННАЯ ФУНКЦИЯ ДЛЯ ТАЙМЕРА
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <windows.h>
#include <tchar.h>
#include <xstring>
#include <string.h>
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR WinName[] = _T("MainFrame");
int APIENTRY _tWinMain(HINSTANCE This, // Дескриптор текущего приложения
HINSTANCE Prev,  // В современных системах всегда 0
LPTSTR cmd, // Командная строка
int mode) // Режим отображения окна
{
HWND hWnd;  // Дескриптор главного окна программы
MSG msg;  // Структура для хранения сообщения
WNDCLASS wc; // Класс окна
// Определение класса окна 
wc.hInstance = This;
wc.lpszClassName = WinName; // Имя класса окна
wc.lpfnWndProc = WndProc;  // Функция окна
wc.style = CS_HREDRAW | CS_VREDRAW; // Стиль окна
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);  // Стандартная иконка
wc.hCursor = LoadCursor(NULL,IDC_ARROW);  // Стандартный курсор
wc.lpszMenuName = NULL;  // Нет меню
wc.cbClsExtra = 0;  // Нет дополнительных данных класса
wc.cbWndExtra = 0;  // Нет дополнительных данных окна
// Заполнение окна белым цветом
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
if(!RegisterClass(&wc)) return 0;  // Регистрация класса окна
// Создание окна
hWnd = CreateWindow(WinName, // Имя класса окна
_T("Каркас Windows-приложения"),  // Заголовок окна
WS_OVERLAPPEDWINDOW, // Стиль окна
CW_USEDEFAULT, // x
CW_USEDEFAULT, // y  Размеры окна
CW_USEDEFAULT, // Width
CW_USEDEFAULT, // Height
HWND_DESKTOP, // Дескриптор родительского окна
NULL, // Нет меню
This, // Дескриптор приложения
NULL); // Дополнительной информации нет
ShowWindow(hWnd, mode); //Показать окно
// Цикл обработки сообщений
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);// Функция трансляции кодов нажатой клавиши
DispatchMessage(&msg); // Посылает сообщение функции WndProc()
}
return 0;
}
// Оконная функция вызывается операционной системой
// и получает сообщения из очереди для данного приложения
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
{
PAINTSTRUCT ps;
HDC hdc;
static int t;
TCHAR s[10], str[20] = _T("Секунды: ");
switch (message)
 
{
case WM_CREATE :
SetTimer(hWnd, 1, 1000, NULL);
break;
case WM_TIMER :
t++;
InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
 _tcscat(str+9, _itot(t, s, 10)); --- не нравится _tcscat просит попробывать wcscat_s я вобще запутался 
TextOut(hdc, 0, 0, str, _tcsclen(str));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
KillTimer(hWnd, 1);
PostQuitMessage(0);
break;
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Ошибка error C4996: 'wcscat': This function or variable may be unsafe. Consider using wcscat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Ответ: Это просто микрософт перестраховывается и считает использование "динамических" строк опасным, вернее использование функций по работе с указателями на строки, оканчивающиеся нулевым символом (и этому есть повод). У вас массив символов статический, поэтому ничто не мешает использовать _tcscat_s (wcscat_s для Unicode и strcat_s для MultyByte), все останутся довольны.
Вопрос: Ошибка: 'strcpy': This function or variable may be unsafe

error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ребят что за ошибка?
Ответ: Security Development Lifecyde (SDL)
Как отключить в свойствах проекта:


Или, выше всех инклудов, прописать: #define _CRT_SECURE_NO_WARNINGS (для getch() не работает, нужно менять на _getch()).

Или ниже всех инклудов прописать: #pragma warning(disable : 4996)

Добавлено через 4 минуты
Сообщение от maestro4250
или используй
Нестандарт для С++:
Сообщение от maestro4250
функцию strcpy_s
Вопрос: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead

ошибка:
Error 1 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\прогрм\новая папка\project27\project27\main.cpp 311 1 Project27

#define _CRT_NO_SECURE_WARNINGS - прописала, но не помогает..)

вот кусок кода, где sprintf:
Код C++
1
2
3
4
5
6
7
8
9
char* str = "";
            str = "Game over";
            fromFile.open("D:\\Настя\\Текст.txt", std::ios::in);
            fromFile >> data;
            fromFile.close();
            char ForRecs[80];
            sprintf(ForRecs, "%s %d %c", "High score is", data, 0);
            display(-2, 3, ForRecs);
            display(0, 0, str);
Подскажите как исправить, пожалуйста))

Добавлено через 8 минут
Уже нашла решение) нужно было прописать
#define _CRT_SECURE_NO_WARNINGS
Ответ:
Сообщение от Nastya_Pyvo
#define _CRT_NO_SECURE_WARNINGS - прописала, но не помогает..)
Сообщение от Nastya_Pyvo
Уже нашла решение) нужно было прописать
#define _CRT_SECURE_NO_WARNINGS
Интересно...
Вопрос: Error C4996: 'gets': This function or variable may be unsafe

Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include"iostream"
#include "cstdio"
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    char str[80];
 
    cout << "Введите строку: ";
    gets(str);  //считываем строку с клавиатуры с помощью функции gets()
 
    cout << "Вот ваша строка ";
    cout << str;
 
    system("pause");
    return 0;
}
выскакивает ошибка
c:\users\андрей\documents\visual studio 2013\projects\programm27\programm27\programm27.cpp(38): error C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

P.S.учусь по книжке,там тема про строки
Ответ: Или ниже всех инклудов прописать: #pragma warning(disable : 4996)
помогло

обожаю этот форум))спасибо))
Вопрос: Ошибка error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <cstring>
#include <fstream>
#include<string>
#include<iomanip>
 
using namespace std;
 
struct link
{
    int age;
    char firstname[10];
    char name[10];
 
    link *next;
 
};
 
class linklist
{
private: link *first;
 
public: linklist()
{
            first = NULL;
}
 
        void add(char * firstname, char* name, int _age);
        void dis();
        void input();
        void zapus(char * firstname, char* name, int _age);
};
void linklist::add(char * firstname, char* name, int _age)
{
    link *newlink = new link;
    newlink->age = _age;
    strcpy(newlink->firstname,firstname);
    strcpy(newlink->name, name);
 
    newlink->next = first;
    first = newlink;
    }
void linklist::dis()
{
    link *current = first;
    while (current)
    {
        cout << current->firstname << endl << current->name << endl<<current ->age;
        current = current->next;
 
    }
}
 
void linklist::input()
{
    char name[10];
    char firstname[10];
    int age;
    cout << "Enter firstname->";
    cin >> firstname;
    cout << "Enter name->";
    cin >> name;
        cout << "Enter age->";
    cin >> age;
    add(firstname, name, age);
    zapus(firstname, name, age);
 
 
}
void linklist::zapus(char * firstname, char* name, int age)
{
    ofstream fout;
 
    fout.open("text.txt", ios::app);
    fout << "\tName: " << name << "\t Firstname: " << firstname << endl
        << "\t age: " << age << endl;
    fout.close();
}
 
int main()
{
    linklist l1;
    l1.input();
}
Подскажите пожалуйста что за ошибка, и как ее исправить

Ошибка 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. f:\коледж\vi-семестр\навчальна практика\лаба_7\лаба_7\исходный код.cpp 37 1 Лаба_7
Ответ: Сорри, ошибся, такой ответ правда есть. Я с какого-то уровня ссылок перестаю смотреть, возвращаюсь в гугл.
Вопрос: C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead

Код:

#include <stdio.h>
using namespace std;
int main(int argc, char* argv[])
{
	int d1, d2, d3, k, n;
	printf("Введите число n, с которым будем сравнивать сумму цифр числа\n");
	scanf("%d", &n);
	k = 0;
	for (d1 = 1; d1 <= 9; ++d1);
	for (d2 = 0; d2 <= 9; ++d2);
	for (d3 = 0; d3 <= 9; ++d3);
		if (d1 + d2 + d3 == n)
		{
			k += 1;
			printf("%d%d%d ", d1, d2, d3);
		}
        system("pause");
}

выдает такую ошибку

Ошибка
Код:

C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Ответ: В ошибке ж все написано. Или используйте scanf_s, или добавьте где-то в опциях проекта или define _CRT_SECURE_NO_WARNINGS (или при создании проекта есть галочка об этом).
Вопрос: This function or variable may be unsafe

Здорова господа!

Скачал визуал студио 2013 премиум и в общем весь старый код пишет с ошибками типо он не безопасен нужно использовать функции с _s на конце. От примерно какие ошибки выводятся:

c:\opencv\build\include\opencv2\flann\logger.h(66): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 12.0\vc\include\stdio.h(211): см. объявление "fopen"
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


нужно fopen() заменить на fopen_s() тогда норм будет, ну смысл мне заменять если я использую готовые библиотеки.
strcmp() на strcmp_s() strcpy() на strcpy_s() и т.д.
Можно ли как то отключить такой режим что б старые функции работали???

Добавлено через 6 минут
Наверно не буду ничего придумывать, есть визуал студио 2010 и что то мне кажется она будет актуальна еще очень долго, а все эти vs 2012, vs2013 в топку, половина либ под них не работает.

Добавлено через 3 минуты
Я вообще от смотрю выходят новые версии визуал студио, а либы то есть старые к ним, там например 2008 года 2004 пусть 2010 и все уже в новых версиях визуал студио эти либы не подключить, смысл тогда гнаться за последней версией компилятора если многие либы отстают от самой среды?

Добавлено через 2 минуты
Правильно ж лучше использовать старые инструменты провереные, по которым уже маны есть что как подключать файлы самих либ для нужной версии компилятора, чем быть первооткрывателем?

Добавлено через 23 минуты
Добавил строчку в файле main.cpp:
C++
1
#define _CRT_SECURE_NO_WARNINGS
Ну и ничего не помогло та же самая ошибка.
Ответ: мне помогло
В разделе "Проект -> Свойства -> C / C ++ -> Preprocessor -> Препроцессор Определения" добавить _CRT_SECURE_NO_WARNINGS
Вопрос: Mysql_real_escape

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /var/www/maxim/data/www/vk.cmsmaks.ru/system/mod.php on line 11
Вот такая ошибка вышла на сайте
Когда заменяю mysql_escape_string на mysql_real_escape_string выдает Неизвестная ошибка

Добавлено через 6 минут
проблема решена просто убрал mysql_escape_string
Ответ: Вот решение проблем, т.к. ...
Внимание
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
mysqli_real_escape_string()
PDO::quote()
Вопрос: Сломался скрипт при переносе сайта с PHP 5.2 на PHP 5.4

Здравствуйте, нужна помощь специалистов. Пришлось перенести сайт на новый хостинг, после чего отказался работать скрипт простенького ротатора баннеров. Я даже не могу залогиниться. Гуглинг ошибок дал понять, что это скорее всего из-за функций, которые не поддерживаются в PHP 5.4 (до этого был PHP 5.2). Помогите, пожалуйста, поправить код, чтобы реанимировать скрипт.

При попытке логина в админку, выдаются следующие ошибки:

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /var/sites/b/bonus-poker.ru/publ ic_html/advert/adm/login.php on line 22

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/sites/b/bonus-poker.ru/public_html/advert/adm/login.php:8) in /var/sites/b/bonus-poker.ru/publ ic_html/advert/adm/login.php on line 28

Fatal error: Call to undefined function session_register() in /var/sites/b/bonus-poker.ru/publ ic_html/advert/adm/login.php on line 29



Вот код страницы login.php:

<html>
<head>
<title>Панель управления - Вход</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<link href="../inc/style.css" type="text/css" rel="stylesheet">
</head>
<body>
<?
if(!isset($_POST['submit']))
{
echo "<center><form action='' method=post>
<table width=200 border=1>
<tr height=30><td width=50 valign=center align=center><b>Login:</b></td><td width=50 valign=center align=center><input type=text name=login size=10></td></tr>
<tr height=30><td width=50 valign=center align=center><b>Password:</b></td><td width=50 valign=center align=center><input type=password name=passwd size=10></td></tr>
</table><br>
<input type=submit name=submit value=Войти> <input type=reset value=Очистить></form>
</center>";
}
else
{
$_POST['passwd'] = md5($_POST['passwd']);
$_POST['login'] = mysql_escape_string($_POST['login']);
require_once "../config.php";
$query = mysql_query("SELECT * FROM `admins` WHERE `login` = '$_POST[login]' AND `password` = '$_POST[passwd]'");
if(mysql_num_rows($query)>0)
{
$r = mysql_fetch_array($query);
session_start();
session_register("admincp");
$_SESSION['login'] = $_POST['login'];
$_SESSION['status'] = $r['status'];
echo "Вход выполнен успешно, сейчас вы будете автоматически перенаправлены на главную страницу.";
echo "<meta http-equiv='refresh' content='3; URL=index.php'>";
} else echo "Неверный логин\пароль<br><a href=# onClick='history.back()'>Назад</a>";
}
?>
</body>
</html>

Заранее благодарю за помощь!

(Отредактировано автором: 29 Августа, 2015 - 21:26:48)

Ответ:
у вас вывод html идет перед
это желательно вынести в самое начало.