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 **/

?>

您还应该考虑一些错误检查以确保返回的 db 结果实际上是 PDO 结果,否则您可能仍然会遇到此问题。

于 2012-09-26T12:21:46.923 回答