M0NSTERC4T
@M0NSTERC4T
Front End Engineer in Live Typing

Как использовать поле класса в SQL запросе?

Создал класс "DataBase", в его конструкторе получаю название таблицы. Это название необходимо использовать в функциях, которые выполняют SQL запросы, но почему то эти запросы выполняются не корректно, тоесть они не получают значение поля, содержащего значение таблицы. Вот код самого класса:
class DataBase {

		private static $database_name;
		private static $mysqli;

		public function __construct($database_name = '')
	{
		$hostname_connect = 'localhost';
		$database_conntect = 'webdb';
		$username_connect = 'root';
		$password_connect = 'root';
		$this->database_name = $database_name;

		$this->mysqli = new mysqli(
			$hostname_connect,
			$username_connect,
			$password_connect,
			$database_conntect
			);



		@mysql_query("set_character_set_client='utf8'");
		@mysql_query("set_character_set_results='utf8'");
		@mysql_query("set collation_connection='utf8_unicode_ci'");
	}


	public function add_user($login='', $email='', $password=''){
		$this->mysqli->query("INSERT INTO '$this->database_name' (login, email, password) VALUES ('$login', '$email', '$password')");
	}

	public function user_is_exist($email= ''){
		$result = $this->mysqli->query("SELECT * FROM '$this->database_name' WHERE email LIKE '$email' "); 
		$num_rows = mysqli_num_rows($result);
		if($num_rows == false) {
			return false;
		}
		else return true;
	}

	}


В случае ручного ввода названия таблицы все работает нормально.
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
Writerim
@Writerim
Заполнить позже...
<?php

class DataBase {

    private static $database_name;
    private static $mysqli;

    public function __construct($database_name = '')
  {
    $hostname_connect = 'localhost';
    $database_conntect = 'webdb';
    $username_connect = 'root';
    $password_connect = 'root';
    $this->database_name = $database_name;

    $this->mysqli = new mysqli(
      $hostname_connect,
      $username_connect,
      $password_connect,
      $database_conntect
      );



    @mysql_query("set_character_set_client='utf8'");
    @mysql_query("set_character_set_results='utf8'");
    @mysql_query("set collation_connection='utf8_unicode_ci'");
  }


  public function add_user($login='', $email='', $password=''){


   // DEBUG
    echo "INSERT INTO '$this->database_name' (login, email, password) VALUES ('$login', '$email', '$password')";
    $this->mysqli->query("INSERT INTO '$this->database_name' (login, email, password) VALUES ('$login', '$email', '$password')");
  }

  public function user_is_exist($email= ''){
    $result = $this->mysqli->query("SELECT * FROM '$this->database_name' WHERE email LIKE '$email' "); 
    $num_rows = mysqli_num_rows($result);
    if($num_rows == false) {
      return false;
    }
    else return true;
  }

  }
  
  
$a = new DataBase('test');
$a->add_user('test' , 'test' , 'test');

// INSERT INTO 'test' (login, email, password) VALUES ('test', 'test', 'test')


все работает корректно

смотрите то что выдаст вам строка
echo "INSERT INTO '$this->database_name' (login, email, password) VALUES ('$login', '$email', '$password')";


а лучше покажите как используете это вы
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Ой ёёёё.

1) Зачем Вы создаете класс для работы с базой данных который четко завязан на 1 таблицу?
Создайте общий класс для работы с базой, от него наследуйте класс модели для конкретного функционала.
Советую почитать про MVC.
Вообще сама идея передачи названия таблицы какая то странная. У Вас много таблиц в которых лежат юзеры?

2) Никогда не используйте оператор подавления ошибок "@"
Код
@mysql_query("set_character_set_client='utf8'");
    @mysql_query("set_character_set_results='utf8'");
    @mysql_query("set collation_connection='utf8_unicode_ci'");
абсолютно бессмысленный, он не выполняется - тут внезапно mysql, а соединения в mysql то и нет, соединение в mysqli

3) Никогда не передавайте данные в базу без обработки. Все данные должны быть как минимум обернуты в mysqli_real_escape_string. Ну или PDO используйте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы