mysql — real_escape_string не работает для php oop

У меня есть два класса, которые ниже:

класс-1: connection_class.php

class connection{
public $connection;

function __construct(){
$this->db_connect();
}

private function db_connect(){
$this->conn = @ new mysqli('localhost', 'username', 'password');
if ($this->connection->connect_error) {
$this->connection = FALSE;
$this->warn = '<br />Failed to connect database! Please try again later';
}
}

}

и логинкласс:
класс-2: login_class.php

class login{
private $conn;
function __construct($con){
if($con->connection==FALSE){
echo $con->warn;
exit();
}else{
$this->conn=$con->connection;
}
}

public function get_user($sql){
$this->db_select('database_name');
$result = $this->conn->query($logopt['sql']);
if($result->num_rows>=1){
return $result;
}else{
return FALSE;
}
}
}

Теперь со страницы входа:
Страница: login.php

include_once('connection_class.php');
$con = new connection();

include_once('login_class.php');
$login = new login($con);

$sql= "SELECT * FROM access WHERE username='".real_escape_string($user_name)."' AND password='".$pass_word."'";
$user=$login->getuser($sql);
if($user){
echo 'User found';
}else{
echo 'User not found';
}

Здесь Если я использую real_escape_string ($ user_name) или mysqli_real_escape_string ($ user_name), login.php показывает следующую ошибку:

Неустранимая ошибка: вызов неопределенной функции real_escape_string () в
………..

Как я могу использовать real_escape_string в моем случае?

1

Решение

Поскольку вы заключаете свое соединение mysqli в другой класс, вам нужно будет предоставить метод для вызова real_escape_string в вашем классе соединения.

например:

class connection{
public $connection;

function __construct(){
$this->db_connect();
}

private function db_connect(){
$this->conn = @ new mysqli('localhost', 'username', 'password');
if ($this->connection->connect_error) {
$this->connection = FALSE;
$this->warn = '<br />Failed to connect database! Please try again later';
}
}

public function real_escape_string($string) {
// todo: make sure your connection is active etc.
return $this->conn->real_escape_string($string);
}
}

А потом поменяй

$sql= "SELECT * FROM access WHERE username='".real_escape_string($user_name)."' AND password='".$pass_word."'";

в

$sql= "SELECT * FROM access WHERE username='".$con->real_escape_string($user_name)."' AND password='".$pass_word."'";

Бонусный комментарий: ваш login класс на самом деле не использует ваше соединение для запуска запросов. Вы должны это исправить (а именно: $this->db_select('database_name');).

3

Другие решения

Вы забыли добавить msql_ в начале функции правильная функция mysql_real_escape_string(); используйте это вместо real_escape_string(); как указано выше.

Надеюсь, что это решит вашу проблему.

0

По вопросам рекламы [email protected]