0

初心者からの質問:-)

MySQL クエリ構文を PDO に変換しようとしていますが、開始する際にいくつかの問題があります。

ページに dbc.php というインクルード ファイルがあります。コードが含まれています:

define ("DB_HOST", "localhost"); // set database host
define ("DB_USER", "dbuser"); // set database user
define ("DB_PASS","dbpass"); // set database password
define ("DB_NAME","dbname"); // set database name

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database");

マイページのコードは次のとおりです。

<?php
include 'dbc.php';
page_protect();

function get_users($db) {   
$getusers = $db->query('SELECT employeeid, fullname FROM Persons order by fullname asc');
}

?>

次のコードを使用してテーブル出力を表示したいと考えています。

<table>
    <tr>
        <th> Full Name</th>
    </tr>
    <?                      
        while($row = $getusers->fetch(PDO::FETCH_ASSOC)) 
        {
    ?>
    <tr>
        <td>
        <?
        echo $row['fullname'];
        ?>
        </td>
    </tr>
        <?
        }
        ?>
</table>

これは現在エラーを出力します:

Fatal error: Call to a member function fetch() on a non-object in /home/she/public_html/versionfour/people.php on line 170

行 170 は、' while($row = $getusers->fetch(PDO::FETCH_ASSOC)) ' ステートメントです。

おそらくまだ PDO を完全に理解していないために、ここで単純なものが欠けていることはわかっています。

どんな助けでも大歓迎です。

よろしくお願いします、R

4

2 に答える 2

4

ページコードは、$dbそうでない場合でも PDO オブジェクトのように扱っています。セットアップには、呼び出しではなく、次のような行を含める必要があります (データベースの種類の接続文字列を確認するには、ドキュメント$db = new PDO('CONNECTION STRING HERE');を参照してください。これが mysql、mssql、またはその他のものであるかどうかは言及しません) 。mysql_connect

于 2012-09-26T12:18:43.833 に答える
3

この問題は、「$getUsers」変数の範囲に関連しています。関数はその値を返さないため、HTML ファイルはこれにアクセスできず、fetch() メソッドが未定義の値で呼び出されようとしているため、エラー内の「非オブジェクト」部分です。

<?php
  /** Include the db file which should define a connection as so
  $db = new PDO('dblib:host=$hostname;dbname=$dbName', $user, $pass); etc
  **/
  include 'dbc.php';

  page_protect();

  function get_users($db) 
  {   
    $result = $db->query("SELECT employeeid, fullname FROM Persons order by fullname asc");
    return $result;
  }
  $users = get_users($db);

  /** $users->fetch() can now be used **/

?>

返されたデータベースの結果が実際に PDO の結果であることを確認するために、いくつかのエラー チェックも考慮する必要があります。そうしないと、この問題が引き続き発生する可能性があります。

于 2012-09-26T12:21:46.923 に答える