Erreur Mysql suite modification au passage en PDO:

Petit nouveau ! | 3 Messages

14 juil. 2016, 14:18

Bonjour,
Voici le bout de code qui me dit l'erreur suivante:

( ! ) Fatal error: Non-static method PDO::query() cannot be called statically in C:\wamp\www\sandrinedejonghe\admin\entree.php on line 133

Et voici le bout de code:

$handle=opendir('../base');//ouvre le rep base
while ($file = readdir($handle)) {
//$i++;
if ($file != "." && mb_eregi('.htm', $file) && $file != "..") { //nouvre que les pages .htm
$affsql = $dbh->query("SELECT * FROM `fiche` WHERE fichier = '../base/$file'"); //effectue la recherche mysql
$affreq = pdo::query($affsql , $dbh ) or die(mysql_error());
$affrow = mysql_num_rows($affreq);
if ($affrow =="0"){
$z++;//sert a afficher la phrase plus bas
echo '<br><input type="radio" name="radiobutton" value="'.$file.'">'.$file.'';
}
}
}
if ($z =="")
echo "<br><br>Toutes les fiches on &eacute;t&eacute; enregistr&eacute;es";
closedir($handle);

Merci pour votre aide

Mammouth du PHP | 2703 Messages

14 juil. 2016, 14:24

voir http://php.net/manual/fr/pdo.query.php pour une utilisation correcte de cette fonction.

Petit nouveau ! | 3 Messages

14 juil. 2016, 14:45

Bonjour,
Merci pour le conseil, mais je suis vraiment un "bleu" en la matière.
Pouvez vous me mettre au moins la modif à faire ?
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juil. 2016, 15:46

Bonjour,

En mode objet, il y a deux façon d'accéder à un attribut ou une méthode. Le mode statique permet un accès sans nécessiter d'instancier un objet en particulier. En gros, la méthode ou l'attribut auquel tu fais appel ne dois pas utiliser $this et ne requière donc pas à une instance spécifique de l'objet. Pour ces appels statiques, on utilise le nom de la classe et l'opérateur "::" de cette façon Classe::methodeStatique()

Certaines méthodes ou attribut au contraire, nécessitent obligatoirement qu'un objet ait été instancié avec un appel à "new". Une fois l'objet instancier, les appels aux méthodes et attributs de l'instance se font à partir de la variable contenant l'instance et l'opérateur "->" de cette façon : $instance->methode()

C'est le cas de la méthode query de pdo. Il faut donc instancier un nouvel objet $dbh = new PDO() et utiliser l'opérateur "->" pour exécuter ta requête
$dbh->query(...);

A noter cependant que ton code comporte un autre problème, puisque la variable $affsql ne contient pas la requête SQL, mais son exécution (où en l’occurrence tu utilises bien la syntaxe $dbh->query() :)).
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

14 juil. 2016, 16:47

Bonjour,
Et bien merci, je me met au boulot.
Cdt