Page 1 sur 1

Erreur sur lignes lors migration fichier msql en mysqli

Posté : 27 juil. 2015, 10:59
par skillcole06
Bonjour,

Je me suis retrouvé dans la situation où mon hébergeur a fait la mise à jour php5.5 et donc mon fichier en mysql n'est plus opérationnel.
J'ai effectué la migration à l'aide de mysql convert tool et 2 lignes de code apparaissent avec des problèmes.

Malgré mes recherches sur la toile et plusieurs essais infructueux depuis quelques jours, je m'en remets à vous demander de l'aide SVP.

Je vous livre les deux lignes avant et après modifications, avec les messages d'erreur.

Voici l'extrait avant avec pour message d'erreur : mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

//! Connect to the MySQL server
public function connect() {
$this->link = @mysql_connect($this->host,$this->user,$this->password);
if (!$this->link)
throw new Exception("Cannot connect to the database.");
$this->selectDB($this->dbname);
$this->connected = true;
}

public function selectDB ($dbname) {
if (!@mysql_select_db($dbname,$this->link))
throw new Exception("This database ($dbname) doesn't exist.");
}

public function getVersion () {
if (!$this->connected)
$this->connect();
return mysql_get_server_info($this->link);



Voici l'extrait après modifications avec pour message d'erreur : Line Message
44 [Line 44] Cannot analyze server parameter to extract host, socket and port! Conversion cannot be performed automatically. You must manually check the result of the conversion.
52 [Line 52] mysql_select_db(string database_name [...]) is emulated using mysqli_query() and USE database_name. This is a possible SQL injection security bug as no tests are performed what value database_name has. Check your script!
Generated Code

//! Connect to the MySQL server
public function connect() {
$this->link = @($GLOBALS["___mysqli_ston"] = mysqli_connect($this->host, $this->user, $this->password));
if (!$this->link)
throw new Exception("Cannot connect to the database.");
$this->selectDB($this->dbname);
$this->connected = true;
}

public function selectDB ($dbname) {
if (!@((bool)mysqli_query($this->link, "USE " . $dbname)))
throw new Exception("This database ($dbname) doesn't exist.");
}

public function getVersion () {
if (!$this->connected)
$this->connect();
return ((is_null($___mysqli_res = mysqli_get_server_info($this->link))) ? false : $___mysqli_res);
}

Voilà pour les "problèmes".

Merci d'avance pour votre éventuelle réponse.

Cordialement

Re: Erreur sur lignes lors migration fichier msql en mysqli

Posté : 27 juil. 2015, 11:59
par @rthur
Bonjour,

La première action est déjà de supprimer les "@" dans ton code car le but des "@" est de masquer les erreurs PHP, ce qui peut être assez problématique pour déboguer son code.

Ensuite au niveau de ton code :
$this->link = @($GLOBALS["___mysqli_ston"] = mysqli_connect($this->host, $this->user, $this->password));
Là je comprends pas ce que tu essaye de faire...

Ensuite pour ta seconde erreur, mysqli à une fonction dédiée mysqli_select_db() pour sélectionner la base de données, plutôt que de faire une query("USE nom_de_la_bdd");
http://php.net/mysqli_select_db

Re: Erreur sur lignes lors migration fichier msql en mysqli

Posté : 27 juil. 2015, 12:12
par skillcole06
Merci pour ta réponse,

Le script était déjà écrit et je l'ai juste converti tel quel. J'ai juste livré la ligne car je ne comprenais pas la structure également

Je vais donc supprimer les @, et voir comment ça réagit.

Pour la deuxième ligne faut-il la réécrire ?

Re: Erreur sur lignes lors migration fichier msql en mysqli

Posté : 27 juil. 2015, 12:37
par skillcole06
Je ne comprends pas forcément comment modifier ces lignes à l'aide du lien, j'ai fait quelques tentatives mais en vain.

Voici le fichier complet, si ça peut aider

<?php




class SystemDBMysql extends SystemObject {

// Variables
// MySQL server configuration
private $host;
private $user;
private $password;
private $dbname;
private $prefix;

// Connection link
private $link;
private $query;
private $connected;
private $nbqueries;

// Db Struct
private $dbStruct;
private $results;

//! Constructor
public function __construct(&$core,$host,$user,$password,$dbname) {
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->dbname = $dbname;
$this->connected = false;
$this->nbqueries = 0;

parent::__construct($core);
}

public function getDBName () {
return $this->dbname;
}

//! Connect to the MySQL server
public function connect() {
$this->link = ($GLOBALS["___mysqli_ston"] = mysqli_connect($this->host, $this->user, $this->password));
if (!$this->link)
throw new Exception("Cannot connect to the database.");
$this->selectDB($this->dbname);
$this->connected = true;
}

public function selectDB ($dbname) {
if (!((bool)mysqli_query($this->link, "USE " . $dbname)))
throw new Exception("This database ($dbname) doesn't exist.");
}

public function getVersion () {
if (!$this->connected)
$this->connect();
return ((is_null($___mysqli_res = mysqli_get_server_info($this->link))) ? false : $___mysqli_res);
}

//! Disconnect from the MySQL server
public function disconnect() {
if (!@((is_null($___mysqli_res = mysqli_close($this->link))) ? false : $___mysqli_res))
throw new Exception("Problem in MySQL disconnect.");
}

//! Return truc if connected
public function isConnected() {
return $this->connected;
}


//! Create a MySQL query Builder
public function createQueryBuilder() {
include_once(ROOT."library/system/System.DBSqlbuilder.php");
$qb = new SystemDBSqlbuilder($this->core, $this->prefix);
$qb->setDBStruct($this->dbStruct);
return $qb;
}

public function setDBStruct ($dbStruct) {
$this->dbStruct = $dbStruct;
}

//! Return the number of executed queries
public function nbQueries() {
return $this->nbqueries;
}

private $microtime;
public function getMicroTime () {
return $this->microtime;
}
public function addMicroTime ($mc) {
if(!isset($this->microtime))
$this->microtime = 0;
$this->microtime += $mc;
//debug('total queries ms ' . ($this->microtime * 1000));
}

//! Execute a query
public function execQuery($query) {
if (!$this->connected)
$this->connect();
$this->nbqueries++;

$this->core->debug->log($query,"sql");
$mc = microtime();
$this->results = mysqli_query($GLOBALS["___mysqli_ston"], $query);
$this->addMicroTime(microtime() - $mc);
return $this->results;
}

public function getError () {
return ((is_object($this->link)) ? mysqli_error($this->link) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false));
}

//! Execute a delete query
public function execDelete($builder) {
$this->query = $builder->createDelete();
$this->results = $this->execQuery($this->query,$this->link);
if (!$this->results)
throw new Exception("MySQL error, can't execute Delete query.<br />".$this->query."<br /><br /><strong>".((is_object($this->link)) ? mysqli_error($this->link) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false))."</strong>");
else
return $this->results;
}

//! Execute a select query
public function execSelect($builder) {
$this->query = $builder->createSelect();
$this->results = $this->execQuery($this->query,$this->link);
if (!$this->results)
throw new Exception("MySQL error, can't execute Select query.<br />".$this->query."<br /><br /><strong>".((is_object($this->link)) ? mysqli_error($this->link) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false))."</strong>");
else
return $this->results;
}

//! Execute a insert query
public function execInsert($builder) {
$this->query = $builder->createInsert();
$this->results = $this->execQuery($this->query,$this->link);
if (!$this->results)
throw new Exception("MySQL error, can't execute Insert query.<br />".$this->query."<br /><br /><strong>".((is_object($this->link)) ? mysqli_error($this->link) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false))."</strong>");
else
return $this->results;
}

//! Execute a update query
public function execUpdate($builder) {
$this->query = $builder->createUpdate();
$this->results = $this->execQuery($this->query,$this->link);
if (!$this->results)
throw new Exception("MySQL error, can't execute Update query.<br />".$this->query."<br /><br /><strong>".((is_object($this->link)) ? mysqli_error($this->link) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false))."</strong>");
else
return $this->results;
}

//! Escape for database
public function escape($str) {
$str = trim($str);
$str = addslashes($str);
return $str;
}

//! Get a row of results
public function getRow($results="") {
if (!$results)
$results = $this->results;
return mysqli_fetch_row($results);
}

//! Get a row of results
public function fetchRow($results="") {
if (!$results)
$results = $this->results;
if(!$results)
return null;
return mysqli_fetch_assoc($results);
}

public function fetchObject ($results="") {
if (!$results)
$results = $this->results;
return mysqli_fetch_object($results);
}

//! Get the id of the Insert query
public function insertId() {
return ((is_null($___mysqli_res = mysqli_insert_id($this->link))) ? false : $___mysqli_res);
}

//! Get the number of rows
public function numRows($results="") {
if (!$results)
$results = $this->results;
if(!$results) return 0;
return mysqli_num_rows($results);
}

public function numFields ($results="") {
if (!$results)
$results = $this->results;
if(!$results) return 0;
return (($___mysqli_tmp = mysqli_num_fields($results)) ? $___mysqli_tmp : false);
}

//! Set prefix to tables
public function setPrefix($prefix) {
$this->prefix = $prefix;
}

public function getPrefix () {
return $this->prefix;
}




}


?>


Encore merci