Prepared statment avec select

ayoubbrs Messages postés 17 Date d'inscription mardi 31 décembre 2013 Statut Membre Dernière intervention 13 janvier 2014 - Modifié par ayoubbrs le 2/01/2014 à 17:24
ayoubbrs Messages postés 17 Date d'inscription mardi 31 décembre 2013 Statut Membre Dernière intervention 13 janvier 2014 - 13 janv. 2014 à 11:08
bonjour les amis

j ai un pti prebleme

comment lancer une requet pre parer select en PDO;(ou mysqli)

merci
<html>
<head>
<body>
<?php
/**
* Classe implémentant le singleton pour PDO
* @author Savageman
*/

class PDO2 extends PDO {

private static $_instance;

/* Constructeur : héritage public obligatoire par héritage de PDO */
public function __construct( ) {
}
// End of PDO2::__construct() */

/* Singleton */





public static function getInstance() {

if (!isset(self::$_instance)) {

try {

self::$_instance = new PDO('localhost', 'root', 'admin','effacer');

} catch (PDOException $e) {

echo $e;
}
}
return self::$_instance;
}
// End of PDO2::getInstance() */
}




public static function submit_request($nom){
$pdo = PDO2::getInstance();
$sql = "SELECT * FROM effacer WHERE nom = :nom ";
$prepareStatement = $pdo->prepare($sql);
$prepareStatement->bindParam(':nom', $nom);

if ($prepareStatement->execute()) {

$result = $prepareStatement->fetchALL(PDO::FETCH_OBJ);
return $result;
}
return $prepareStatement->errorInfo();

}






print_r($result);
print_r($prepareStatement);



?>




</body>
</html>

2 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
10 janv. 2014 à 13:23
Hello,

C'est simple comme bonjour :).

Conseil : ne stocke pas les identifiants à ta BDD en dur dans ta classe PDO, définis les en amont dans ton code, par exemple :


define('MYBDD', 'mysql:dbname=nomdetabase;host=localhost');
define('BDDUSER', 'username');
define('BDDPWD', 'password');

Ensuite tu charges ta classe contenant les constantes définies :


class PDO2 extends PDO {

private static $_instance;

/* Constructeur : héritage public obligatoire par héritage de PDO */
public function __construct( ) {

}
// End of PDO2::__construct() */

/* Singleton */
public static function getInstance() {

if (!isset(self::$_instance)) {

try {

self::$_instance = new PDO(MYBDD, BDDUSER, BDDPWD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

} catch (PDOException $e) {

echo $e;
}
}
return self::$_instance;
}
// End of PDO2::getInstance() */
}

C'est la classe que j'utilise généralement, celle-ci est optimisée pour les BDD en UTF8 ("array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")").

Bref, tu charges ça dans tes scripts et t'es pénard, il suffit alors de créer ton objet PDO pour effectuer tes requêtes :

Il te suffit de créer ton objet PDO comme ceci :


// création de l'objet PDO :
$pdo = PDO2::getInstance();

// préparation de la requête :
$req = $pdo->prepare("SELECT * FROM table");

// exécution de la requête :
$req->execute();

// récupération des résultats de la requête :
while($donnees = $req->fetch()){

$id = $donnees['id'];

}

Perso je te recommande de procéder ainsi pour ne pas te faire chier, suivant l'architecture de ton site il convient de charger les fichiers dans un ordre logique pour ne pas avoir du code redondant et inutile :

- - - Dans tes scripts "généraux" :

1 -> tu définis les constantes en tout premier lieu.

2 -> tu charges ta classe PDO.

3 -> tu crées ton objet PDO.

- - - Dans tes scripts "annexes" :

tu effectues tes requêtes simplement en appelant l'objet PDO créés :
(je ne te redonnes pas d'exemple pour le SELECT)


// exemple d'insertion :
$req = $pdo->prepare("INSERT INTO table (nom, prenom, age) VALUES (:nom, :prenom, :age)");

$req->execute(array(
":nom" => "DUPONT",
":prenom" => "Jean-René",
":age" => 25
));

// exemple d'update :
$req = $pdo->prepare("UPDATE table SET age = :age WHERE nom = :nom");

$req->execute(array(
":age" => 33,
":nom" => "DUPONT"
));

// exemple avec DELETE :
$req = $pdo->prepare("DELETE FROM table WHERE prenom = :prenom");

$req->execute(array(":prenom" => "Jean-René"));

// compter les résultats d'une requête :

$nb = $req->rowCount(); // retourne le nombre de lignes de la requête

Si tu veux en savoir + je t'invite à feuilleter ce tutoriel :

http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql

A+
0
ayoubbrs Messages postés 17 Date d'inscription mardi 31 décembre 2013 Statut Membre Dernière intervention 13 janvier 2014
Modifié par ayoubbrs le 13/01/2014 à 11:09
RE
bonjour
je te remercie pour cette bref explication j ai appris bc de chose.
si j ai plusieur select et insert sur le meme fichier php c est mieux de faire une classe et function au lieu de repeter la chaine de conex chaque fois ? .
0
Rejoignez-nous