littus
Новичок
Всем доброго дня!
Игнорируется ф-я mysqli_real_escape_string(); при занесении результатов в БД через метод подготовленного запроса.
БД MySQL;
конфигурация magic_quotes_gpc конечно же в off.
В библиотеке 2 функции:
function clearData($data){ // фильтр принимаемых параметров с формы
global $link; // соединение с БД
return mysqli_real_escape_string($link,trim(htmlspecialchars(strip_tags($data)))); break;
........
}
function addToCatalog($title, $author, $pubyear, $price) { // добавление в БД данных
global $link; // соединение с БД
$sql= "INSERT INTO catalog (title, author, pubyear, price) VALUES (?,?,?,?)";
if(!$stmt= mysqli_prepare($link,$sql)): return FALSE;
else:
mysqli_stmt_bind_param($stmt, "ssid", $title, $author, $pubyear, $price);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
return TRUE;
endif;
}
---------------------------------------------------
скрипт исполняемого файла:
if ( ($_SERVER['REQUEST_METHOD']=="POST"):
$title= clearData($_POST['title']);
$author= clearData($_POST['author']);
$pubyear= ...........
$price= .............
addToCatalog($title, $author, $pubyear, $price);
header("Location: " .$_SERVER['REQUEST_URI']);
endif;
Если $title или $author будут иметь значения с апострофом типа O'Brian, то у меня в БД уходит экранированный апостроф (O\'Brian) хотя не должен, по идее,т.к. я использую функцию mysqli_real_escape_string(). По крайней мере при использовании старого расширения php_mysql.dill и при данном php_mysqli.dill , но не используя метод подготовленного запроса, - в БД идет все правильно в виде O'Brian, на основании чего сделал вывод, что дело именно в прохождении данных через подготовленный запрос.
Я, конечно, могу в данном случае, уже потом при выводе данных из БД пропустить через stripslashes(); Но будет ли это нормальным подходом или как-то можно более
грамотно решить вопрос?
Спасибо.
Игнорируется ф-я mysqli_real_escape_string(); при занесении результатов в БД через метод подготовленного запроса.
БД MySQL;
конфигурация magic_quotes_gpc конечно же в off.
В библиотеке 2 функции:
function clearData($data){ // фильтр принимаемых параметров с формы
global $link; // соединение с БД
return mysqli_real_escape_string($link,trim(htmlspecialchars(strip_tags($data)))); break;
........
}
function addToCatalog($title, $author, $pubyear, $price) { // добавление в БД данных
global $link; // соединение с БД
$sql= "INSERT INTO catalog (title, author, pubyear, price) VALUES (?,?,?,?)";
if(!$stmt= mysqli_prepare($link,$sql)): return FALSE;
else:
mysqli_stmt_bind_param($stmt, "ssid", $title, $author, $pubyear, $price);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
return TRUE;
endif;
}
---------------------------------------------------
скрипт исполняемого файла:
if ( ($_SERVER['REQUEST_METHOD']=="POST"):
$title= clearData($_POST['title']);
$author= clearData($_POST['author']);
$pubyear= ...........
$price= .............
addToCatalog($title, $author, $pubyear, $price);
header("Location: " .$_SERVER['REQUEST_URI']);
endif;
Если $title или $author будут иметь значения с апострофом типа O'Brian, то у меня в БД уходит экранированный апостроф (O\'Brian) хотя не должен, по идее,т.к. я использую функцию mysqli_real_escape_string(). По крайней мере при использовании старого расширения php_mysql.dill и при данном php_mysqli.dill , но не используя метод подготовленного запроса, - в БД идет все правильно в виде O'Brian, на основании чего сделал вывод, что дело именно в прохождении данных через подготовленный запрос.
Я, конечно, могу в данном случае, уже потом при выводе данных из БД пропустить через stripslashes(); Но будет ли это нормальным подходом или как-то можно более
грамотно решить вопрос?
Спасибо.