Jump to content

[Resolvido] Erro: No database selected


Recommended Posts

Posted (edited)

Boas Noites... estou para aqui a tentar criar uma class para interagir com o bd, o código que eu tenho é o seguinte:

class DB_conn {
private $mysql = array();
private $conn;
public $errors;
function __construct() {
	define('DATABASE', 'Filipe', true);
	switch (DATABASE) {
		case 'Subba':
			$this->mysql['loc'] = 'localhost';
			$this->mysql['db'] = "votebox";
			$this->mysql['user'] = "root";
			$this->mysql['pass'] = "";
			break;
		case 'Filipe':
			$this->mysql['loc'] = "localhost";
			$this->mysql['db'] = "jitp_db";
			$this->mysql['user'] = "root";
			$this->mysql['pass'] = "";
		default:
			break;
	}
}
//CORE FUNCTIONS
private function connect() {
	$this->conn = mysql_connect($this->mysql['loc'], $this->mysql['user'], $this->mysql['pass']) or die('Connection Errors: ' . mysql_error());
	mysql_select_db($this->mysql['db']);
}
private function close() {
	mysql_close($this->conn);
}
private function clean($str) {
	return mysql_real_escape_string($str);
}
//MYSQL FUNCTIONS - get/add/update/delete
public function getAllVideos() {
	//OPEN CONNECTION
	$this->connect();
	//GET DATA FROM DATABASE
	$data = array();
	$result = mysql_query(" SELECT V.vid_id id, V.vid_url url, V.vid_vCode vCode, V.vid_thumbnail thumbnail, V.vid_episodeNr episodeNr, C.cat_title cat
							FROM tb_jitp_videos V
							INNER JOIN tb_categories C ON V.cat_id = C.cat_id;");
	while ($row = mysql_fetch_array($result)) {
		$data[] = $row;
	}
	//CLOSE CONNECTION
	$this->close();
	//RETURN DATA
	return $data;
}
public function addVideo($url, $episodeNr, $categorieID) {
	//OPEN CONNECTION
	$this->connect();
	//VALIDATION OF FIELDS
	if (!is_numeric($episodeNr)) { //validation of episonde number
		$this->errors = 'Episode Number not Valid';
		return false;
	}
	if (!$this->isCategorie($categorieID)) { //validation of Video Categorie
		$this->errors = 'Categorie not Valid';
		return false;
	}
	$video = new Youtube($url);
	if (!$video) {
		$this->errors = 'Url not Valid';
		return false;
	}
	$url = $this->clean($url);
	$vCode = $video->getID();
	$thumbnail = $video->getThumbnail();
	//INSERT
	$query = 'INSERT INTO tb_jitp_videos
				(vid_id, vid_url, vid_vCode, vid_thumbnail, vid_episodeNr, cat_id) VALUES
				(null, "' . $url . '", "' . $vCode . '", "' . $thumbnail . '", ' . $episodeNr . ', ' . $categorieID . ' )';
	if (!mysql_query($query)) {
		$this->errors = mysql_error();
		return false;
	}
	//CLOSE CONNECTION
	$this->close();
	return true;
}
}

o proble ma é o seguinte, quando eu faço o select funciona

$conn = new DB_conn();
$conn->getAllVideos();

mas quando eu quero fazer um insert

$conn = new DB_conn();
if ($conn->addVideo('http://www.youtube.com/watch?feature=player_embedded&v=PhQuE9gVLBw', '32', '1')) {
echo 'boa';
} else {
echo $conn->errors;
}

O erro é o seguinte: No database selected

Alguém me pode dar uma ajudinha? Obrigado

Edited by MASNathan
Posted (edited)

como o código é o mesmo (a chamada da função connect) o problema deverá se situar na utilização da classe em código que não apresentas.

por essa razão, o único problema que vou referência não é directamente relacionado com o erro descrito mas algo que tem haver com a ligação à base de dados (podendo resultar no teu erro)

imaginemos que executas as duas funções da classe consecutivas

$conn = new DB_conn();
$conn->getAllVideos();
$conn->addVideo('http://www.youtube.com/watch?feature=player_embedded&v=PhQuE9gVLBw', '32', '1');

A função connect será chamada duas vezes. Isto implica que criarás duas ligações à base de dados. Bem, na realidade não deverá criar porque a segunda chamada irá falhar (normalmente).

O meu conselho é criares uma classe de ligação com a ligação privada e uma função singleton. Desta forma estarás sempre a usar a mesma ligação para todas as interacções com a base de dados.

Ao generalizar este problema a outras classes que poderás ter (com novas ligações à base de dados) o problema poderá se situar na criação de múltiplas ligações, mesmo que estas ligações sejam efectuadas em classes diferentes.

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.