新手的问题:-)
我正在尝试将我的 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
您的页面代码将$db
视为PDO对象,而事实并非如此。您的设置必须包含类似 $db = new PDO('CONNECTION STRING HERE');
的行(请参阅文档以找出数据库类型的连接字符串;您没有提及这是 mysql、mssql 还是其他内容),而不是mysql_connect
调用。
您遇到的此问题与"$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 结果,否则您可能仍会遇到此问题。