JeuWeb - Crée ton jeu par navigateur
[RESOLU][PHP] classe extend PDO - soucis avec execute() - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [RESOLU][PHP] classe extend PDO - soucis avec execute() (/showthread.php?tid=6016)

Pages : 1 2 3 4 5


[RESOLU][PHP] classe extend PDO - soucis avec execute() - Talus - 07-03-2012

salut a tous

lorsque je stock des donne dans ma DB avec mon extend de PDO
j'ai le droit a des entrée avec des `0` a la place de mes valeur binder

voici mon code :

public function add(Users $user) {
$q = $this->_sql->prepare("INSERT INTO ".$this->_table." VALUES(
' ',
user_name = :name,
user_email = :email,
user_password = :password,
user_locale = :locale,
user_right = :right,
user_forum = :forum,
user_key = :key)");
$q->bindValue(':name', $user->getName());
$q->bindValue(':email', $user->getEmail());
$q->bindValue(':password', $user->getPassword());
$q->bindValue(':locale', $user->getLocale());
$q->bindValue(':right', $user->getRight(), PDO:TongueARAM_INT);
$q->bindValue(':forum', $user->getForum(), PDO:TongueARAM_INT);
$q->bindValue(':key', $user->getKey());
echo "___10___";
$q->execute();
echo "___11___";
}

et voici mon extend :


<?php

/* Classe SQL.
** Auteur : Matty
** Dernière modification : 10/06/09 - 16h25
** Description : extend de MySQLi, et petit log de débug.
** Notes d'auteur :
** Journal :
** - Ajout de l'en-tête commentaire par Matty.
** - [Matty] Encodage changé en utf-8.
** [Talus] 27/02/2011 à 16h25 - Passage en PDO
*/

class SQLException extends PDOException {}

class SQLStatement extends PDOStatement
{
public function execute($allParams = NULL, $bindMode = Sql::BINDMODE_VALUE) {
if(!in_array($bindMode, array(Sql::BINDMODE_VALUE, Sql::BINDMODE_PARAM)))
{
$this->throwError('Unknow bind mode "<b>'. $bindMode .'</b>".');
return FALSE;
}
else
{
$last_marker = 0;
foreach($allParams as $marker => $value) {
if(!is_string($marker))
$marker = ++$last_marker;
$type = Sql:TongueARAM_STR;
if(is_int($value))
$type = Sql:TongueARAM_INT;
$this->$bindMode($marker, $value, $type);
}
return parent::execute();
}
}

public function bindValue($parameter, $value, $data_type = Sql:TongueARAM_STR)
{
if($data_type == Sql:TongueARAM_INT)
$value = (int) $value;
return parent::bindValue($parameter, $value, $data_type);
}

public function bindParam($parameter, $value, $data_type = Sql:TongueARAM_STR, $length = NULL, $driver_options = NULL)
{
if($data_type == Sql:TongueARAM_INT)
$value = (int) $value;
return parent::bindParam($parameter, $value, $data_type, $length, $driver_options);
}

private function throwError($error_message, $code = NULL)
{
if($this->getAttribute(Sql::ATTR_ERRMODE) == Sql::ERRMODE_EXCEPTION)
throw new SQLException($error_message, $code);
elseif($this->getAttribute(Sql::ATTR_ERRMODE) == Sql::ERRMODE_WARNING)
trigger_error($error_message, E_WARNING);
}
}



class Sql extends PDO {
const ATTR_LOG_QUERIES = 'SQL_ATTR_LOG_QUERIES';
const BINDMODE_VALUE = 'bindValue';
const BINDMODE_PARAM = 'bindParam';

public $exeTime = 0;
public $queriesCount = 0;
public $queriesTrace = null;

private $driver_options;
private $dsn;
private $user;
private $pass;

public function __construct($Host, $Login, $Password, $db) {

$this->dsn = "mysql:host=".$Host.";dbname=".$db;
$this->user = $Login;
$this->pass = $Password;

$this->driver_options = array(
self::ATTR_ERRMODE => self::ERRMODE_EXCEPTION,
self::ATTR_DEFAULT_FETCH_MODE => self::FETCH_OBJ,
self::ATTR_STATEMENT_CLASS => array('SQLStatement')
);
try{
parent::__construct($this->dsn, $this->user, $this->pass, $this->driver_options);
}
catch (PDOException $e){
echo "Connexion à la base de données du jeu impossible.<br />".$e->getMessage();
}
}

public function prepare($statement, $driver_options = array()) {
$this->queriesTrace[$this->queriesCount]['Prepare'] = $statement;
$iniTime = microtime(true);
$stmt = parent::prepare($statement, $this->driver_options);
if ( isset($driver_options[Sql::ATTR_LOG_QUERIES]) ) {
$stmt->addListener($driver_options[Sql::ATTR_LOG_QUERIES]);
}
$this->queriesCount++;
return $stmt;
}

public function query($Query) {
$this->queriesTrace[$this->queriesCount]['Query'] = $Query;
$iniTime = microtime(true);
try {
$stmt = parent::query($Query);
$iniTimeQuery = microtime(true) - $iniTime;
$this->exeTime += $iniTimeQuery;
$this->queriesTrace[$this->queriesCount]['Time'] = round($iniTimeQuery * 1000, 2);
$this->queriesCount++;
}
catch (PDOException $e){
echo "Une erreur est survenue lors de l\'exécution d\'une requête à la base de données.<br />
<u>Informations :</u><p><strong>SQL ".$e->getMessage()."</strong></p><br />
<u>Requête concernée par l\'erreur :</u><p>".$Query."</p>";
$stmt = false;
}
return $stmt;
}
}
?>



RE: [PHP] classe extend PDO - soucis avec execute() - quentin01 - 07-03-2012

Et peut être qu'on pourrait avoir l'erreur ? ( Capture l'exception lancé par PDO pour l'avoir )


RE: [PHP] classe extend PDO - soucis avec execute() - Talus - 07-03-2012

le fait est qu'il y a pas d'erreur, enfin, rien a catcher
ça stop tout simplement l’exécution du script, du coup j'ai une page blanche sans rien

enfin je vois le ___10___ mais pas le ___11___

a remonter le file du code a coup de echo, j'ai vu que ça venais d'ici


RE: [PHP] classe extend PDO - soucis avec execute() - Ter Rowan - 07-03-2012

et en plaçant des echo a l intérieur de l execute ?


RE: [PHP] classe extend PDO - soucis avec execute() - quentin01 - 07-03-2012

Aucune erreur et aucune exception, c'est quand même étrange.
Mais tu n'as pas regardé dans la méthode execute où ça bloque ?


RE: [PHP] classe extend PDO - soucis avec execute() - Talus - 07-03-2012

je viens de tester avec un echo avant toute chose dans ma méthode execute
il s'affiche pas

et même en "vidant" la méthode en ne laissant que le echo, il se passe que dalle

je vous jure j'ai des truc mystique avec PHP ^^


au pire j'ai la solution de secoure, ne pas surcoucher PDO, mais autant faire en sorte que ca marche


RE: [PHP] classe extend PDO - soucis avec execute() - Ter Rowan - 07-03-2012

t es sur que c'est bien ta classe que tu appelles ?

$this->_sql est bien ce que tu veux ?


RE: [PHP] classe extend PDO - soucis avec execute() - Talus - 07-03-2012

(07-03-2012, 10:47 PM)Ter Rowan a écrit : t es sur que c'est bien ta classe que tu appelles ?

$this->_sql est bien ce que tu veux ?


oui oui, ca c'est bon

car j'arrive a faire des "query", j'arrive a "bind", mais pas a "execute"


RE: [PHP] classe extend PDO - soucis avec execute() - quentin01 - 07-03-2012

T'es sûr que tu as bien activé l'affichage des erreurs par PHP ?


RE: [PHP] classe extend PDO - soucis avec execute() - Talus - 07-03-2012

oui oui les erreur sont bien activer
il y a pas de soucis de ce cotée la