0

Пишу функцию для очистки url от всего лишнего, функция вынесена в отдельный файл:

<?php
    function clearString($cl_str){
        $cl_str = strip_tags($cl_str);
        $cl_str = mysqli_real_escape_string($cl_str);
        $cl_str = trim($cl_str);
        return $cl_str;
    } 
 ?>

Далее, уже в другом файле, я эту функцию вызываю:

<?php
    include("include/db_connect.php"); //подключение к БД
    include("functions/functions.php"); //Подключение непосредственно сабжа

    $cat = clearString($_GET["cat"]); 
    $type = clearString($_GET["type"]);
    $sorting = $_GET["sort"];

    include("include/sorting.php"); 
?>

Собственно, это всё на странице, где у меня реализован вывод товаров по категориям. Пытаюсь протестировать функцию - выбираю категорию товара (к примеру, Audi) и получаю сверху на странице такую ошибку:

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\OpenServer\domains\autopartshop.ua\functions\functions.php on line 4

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\OpenServer\domains\autopartshop.ua\functions\functions.php on line 4

Лезу в документацию по mysqli_real_escape_string(), там пишется, что нужен еще параметр подключения к бд, я его вставляю этот $link и получаю это:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\OpenServer\domains\autopartshop.ua\functions\functions.php on line 4

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in C:\OpenServer\domains\autopartshop.ua\functions\functions.php on line 4

Помогите, пожалуйста, разобраться!

Dremjke
  • 71
  • Покажите какое соединение вы передаете в функцию? Ясно же написано, что передаете null. У вас подключение в файле db_connect. Покажите что в нем – Moonvvell May 10 '17 at 06:27
  • @Moonvvell вот содержимое коннекта: – Dremjke May 10 '17 at 06:30
  • Приведите весь ваш код в вопросе. Вы написали что вставляете линк в функцию. Из вашего вопроса этого не видно. Ваша функция clearString, к примеру, должна тогда принимать два параметра, соединение и саму строку – Moonvvell May 10 '17 at 06:42
  • @Moonvvell я имею в виду, что в функции clearString я добавляю $link первым параметром в функцию mysqli_real_escape_string(), то есть выглядит она таким образом: $cl_str = mysqli_real_escape_string($link, $cl_str); – Dremjke May 10 '17 at 06:45
  • 1
    @Dremjke, вы занимаетесь ерундой используя такую функцию clearString(). Вам нужно использовать подготовленные выражение при запросах к БД. А вывод введенных пользователем данных делать через htmlspecialchars(). – Visman May 10 '17 at 06:52
  • @Vismanу меня нету здесь выводе введённых пользователем данных. Функция clearString нужна для того, чтобы очищать url от лишних символов при непосредственных запросах к БД (в данном случае - при выводе из БД товаров по категориям) – Dremjke May 10 '17 at 06:59
  • @Dremjke, https://ru.stackoverflow.com/q/511895/186083 – Visman May 10 '17 at 07:13
  • @Visman спасибо большое, буду изучать материал. Однако, вопрос с ошибкой остаётся открытым... – Dremjke May 10 '17 at 07:22
  • решили данную проблему ? точь в точь как у вас, ошибки те же выдает – Алексей Соколов May 30 '18 at 18:11

1 Answers1

0

Согласно http://php.net/manual/ru/mysqli.real-escape-string.php запись mysqli_real_escape_string в процедурном стиле выглядит так:

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

где $link - идентификатор соединения, полученный с помощью mysqli_connect(), а $escapestr - строка, которую вам нужно экранировать.

Если компилятор ругается, что передаете null - скорее всего вы передаете пустую переменную.

Oboroten
  • 310
  • Спасибо большое, теперь разобрался и всё работает :) В файл functions.php в функцию clearString первой строкой я добавил $link = mysqli_connect("localhost", "root", "", "db_shop"); и теперь всё работает!) – Dremjke May 10 '17 at 15:07
  • @Dremjke осталось только понять, какой смысл вызывать здесь mysqli_real_escape_string, которая НИЧЕГО НИ ОТ ЧЕГО не "очищает". Не говоря уже о целиком бессмысленной функции clearString – Ипатьев Jul 24 '22 at 08:07