J'ai écrit du code personnalisé PHP de base pour mon site Wordpress. Le code accède essentiellement à une base de données MySQL (différente de la base de données wordpress) et affiche les informations. En plus de l'exécuter sur la page principale, j'ai également besoin de l'exécuter sur la barre latérale. Le code fonctionne parfaitement dans la page principale ou il fonctionne parfaitement dans la barre latérale, mais lorsque je mets le code dans les deux, j'obtiens l'erreur suivante dans la barre latérale:
Erreur fatale: appel d'une fonction membre prepare () sur un non-objet dans /home/kimusubi/public_html/wp-content/plugins/php-code-widget/execphp.php(44 ): code eval () sur la ligne 5
Je pensais qu'il était difficile d'accéder à la même table et à la même base de données en même temps, mais j'utilise include_once et ferme ma connexion dès que j'en ai terminé, alors je ne suis pas sûr du problème. Voici le code que j'utilise pour la barre latérale et la page de la colonne principale:
<?php
include_once 'db_config.php'; //Include database configuration file
$current_user = wp_get_current_user()->user_login; //Get current WP logged in user
try { //Access accounts table and pull user info into associative array
$STH = $DBH->prepare("SELECT * FROM accounts WHERE accnt = :accnt");
$STH->bindParam(':accnt', $current_user);
$STH->execute();
$Result = $STH->fetch(PDO::FETCH_ASSOC);
$DBH = null;
}
catch(PDOException $e) {
echo "Select Accounts Table Error: " .$e->getMessage(). "</br>"; //Display Error (if any)
}
$available = min($Result['week_two'],$Result['week_one'],$Result['current']);
echo "Account: " .$Result['accnt']. "</br>";
echo "Name: " .$Result['first']. " " .$Result['last']. "</br>";
echo "Address: " .$Result['address']. ", " .$Result['city']. ", " .$Result['state']. ", " .$Result['Zip']. "</br>";
echo "Phone: " .$Result['phone']. "</br>";
echo "Current Balance: $" .$Result['current']. "</br>";
echo "Available Balance: $" .$available. "</br>";
?>
Et voici ce qui se trouve dans mon fichier db_config.php:
<?php
try {
$DBH = new PDO("mysql:Host=$Host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e) {
echo "Select DB Error: " .$e->getMessage(). "</br>";
}
?>
Exec-PHP est le seul plugin que j'utilise pour exécuter PHP directement à partir de Wordpress. J'apprécierais n'importe quelle orientation.
Tout d’abord, n’utilisez pas le plugin Exec-PHP, mais écrivez le vôtre. Deuxième utilisation de l'objet $ wpdb (instance de la classe WPDB) pour effectuer tous les appels vers la base de données.
Vous n'êtes pas obligé d'utiliser Exec-PHP, vous pouvez donc le retirer de l'équation. Exécutez PHP dans un modèle de page pour la page principale Modèles de page "Codex WordPress avec un modèle de page personnalisé.
Et utilisez WordPress ›PHP Code Widget" Plugins WordPress pour exécuter PHP dans un widget; c'est essentiellement un widget texte qui exécute PHP.