web-dev-qa-db-ja.com

ページコンテンツ内の非WPデータベース/テーブルからのデータへのアクセス

私は自作の(PHP/MySQL)ウェブページのセットをWPに変換しようとしています。私は欲しいテーマをインストールしました、そしていくつかの基本的なページはうまく動いています。

しかし、MySQLデータベーステーブル(WPデータベースとは別に)内にデータのセットがあり、それをクエリして、いくつかの行(以下の例では50)を抽出して日付順に表示します。 WP Webページのコンテンツの表にあります。

私はexec-PHPプラグインをインストールして、単純なものが期待通りに動作することを証明しました。

自分のデータベース(自分のデータベースのWPデータベースと同じホストシステム)にある自分のテーブルからデータを抽出するには、次のPHPを使用します。それはきれいではないかもしれませんが、私の自宅で育ったWebサイトのphpで純粋にコード化された時にはうまくいきました(以下に示すような古い詳細)。

それはWPの下には何も生成しません...あるいはテーマのためのWPデータベーステーブルと全く無関係の何かを生成します(異なる列、異なるDBテーブル)誰もが光を投げられます何が悪いの? (NB私が働きたいループを得るためにさまざまな組み合わせを試してみました。それから私は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>

更新1:

今のところ繰り返しを無視します - 今は単純化したバージョンを持っていますが、それはまだ期待していた2ではなく "0 in table"を返します。

<?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 ';
?>

更新2:

わかりましたので、show_errorsを使用して次のように実行できます。

$my_db->show_errors();

そしてそれでそれが好きではないことがわかります:

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

そして私は私が知っている2行を取得しています。

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