web-dev-qa-db-fra.com

Accès aux données d'une base de données/table non-WP dans le contenu d'une page

J'essaye de convertir un ensemble de pages Web construit à la maison (PHP/MySQL) en WP. J'ai installé le thème de mon choix et certaines pages de base fonctionnent correctement.

Cependant, j'ai un ensemble de données dans une table de base de données MySQL (distincte de la base de données WP) et je souhaite l'interroger en extrayant un nombre de lignes (50 dans l'exemple ci-dessous) et en les affichant par ordre de date. dans un tableau du contenu de la page Web WP.

J'ai installé le plugin exec-PHP et prouvé qu'un simple fonctionne comme prévu.

Pour extraire les données de ma propre table dans ma propre base de données (sur le même système hôte que la base de données WP), j'utilise le code PHP suivant. Ce n'est peut-être pas joli mais cela a bien fonctionné quand il était codé purement en php sur mon site web d'origine (anciens détails comme indiqué ci-dessous).

Il ne produit rien sous WP ... ou il produit quelque chose de totalement indépendant d'une table de base de données WP pour le thème (colonnes différentes, table de base de données différente). sur ce qui ne va pas? (NB: j’ai essayé diverses combinaisons pour obtenir la boucle que je veux utiliser. C’est alors que je reçois un chargement de données à partir d’une table de base de données WP.

<table>

  <!-- Retrieve the data from the table -->
  <?php
  DEFINE ('DB_USER','a_db_user_with select_permissions');
  DEFINE ('DB_PASSWORD','users_passwd');
  DEFINE ('DB_Host','localhost');
  DEFINE ('DB_NAME','database_name');
//****old php connection details
//$dbc = @mysql_connect (DB_Host, DB_USER, DB_PASSWORD) OR die ('Could not connect to MySQL: ' . mysql_error() );
//@mysql_select_db (DB_NAME) OR die ('Could not select the database: ' . mysql_error() );

// new connection stuff for the WP page version
$my_db = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_Host);
$query = "SELECT col1, col2, col3, col4, col5, col6 FROM tablename ORDER BY Date_presented DESC LIMIT 50";

// Old query execution and results collections
//$result = @mysql_query ($query); 
//$num = mysql_num_rows ($result);

// New details for WP page   
$result = $my_db->get_results($query);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
 echo '<tr><td align="left" style="width: 6%; font-size: 9pt">' .  $row['col1'] . '</td>
<td align="left" style="width: 18%; font-size: 9pt">' . $row['col2'] . '</td>
<td align="left" style="width: 38%; font-size: 9pt">' . $row['col3'] . '</td>
<td align="left" style="width: 25%; font-size: 9pt">' . $row['col4'] . '</td>
<td align="left" style="width: 8%; font-size: 9pt">' .  $row['col5'] .  '</td>
</tr>';
 }
  ?>

</table>

Mise à jour n ° 1:

Ignorer l'itération pour l'instant - j'ai maintenant une version simplifiée, mais elle renvoie toujours "0 dans la table" plutôt que la 2 à laquelle je m'attendais:

<?php 
 $my_db = new wpdb('fred','bloggs','database','localhost');
 $query = "SELECT DATE_FORMAT(col1, '%d-%b') AS Pdate, DATE_FORMAT(col1, '%Y') AS Pyear, col2, col3, col4, col5 AS fname FROM $my_db->Table ORDER BY col1 DESC LIMIT 50";
$result = $my_db->get_results($query);
echo $my_db->num_rows . ' in table ';
?>

Mise à jour # 2:

OK, donc j'ai découvert que je pouvais montrer des erreurs en utilisant:

$my_db->show_errors();

et avec qui peut voir qu'il n'aime pas:

"FROM $my_db->table" and prefers 
"FROM table" only

et je reçois les 2 rangées que je sais sont là.

1
tjb
<?php 
  $mydb = new wpdb('uid','passwd','database','localhost');
  $mydb->show_errors();
  $query = "SELECT DATE_FORMAT(col1, '%d-%b') AS Pdate, DATE_FORMAT(col1, '%Y') AS Pyear, col2, col3, col4, col5 AS fname FROM table ORDER BY col1 DESC LIMIT 50";
 $result = $mydb->get_results($query);
 echo $mydb->num_rows . ' in table ';
?>
1
tjb