下午好!
我已经建立了一个连接类到Microsoft Access数据库(可以工作)。但是,我的问题在于我正在尝试使用此类来执行简单的SQL语句,并且我收到错误消息:致命错误:在非对象上调用成员函数fetchALL()。
我是PDO的新手并且已经在线阅读了很多文章,但无济于事。我想我理解我的问题,但不完全,请有人可以了解情况,并可能提供一个答案,为什么我收到错误信息?
connectionClass.php
class connection{
public $con;
private $dbName;
function __construct(){
$this->dbName = $_SERVER["DOCUMENT_ROOT"] . "\database\yakety1new.mdb";
}
function connect(){
$this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$this->dbName; Uid=Admin; Pwd=;");
$this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
return $this->con;
}
}
if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}
testIndex.php
try{
include_once '\classes\connectionClass.php';
$con = new connection();
$pdoConnection = $con->connect();
$sql = $pdoConnection->prepare("SELECT * FROM celebs");
$result = $pdoConnection->exec($sql);
while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) {
echo $row['firstname'];
echo $row['surname'];
}
} catch (Exception $e){
echo 'ERROR:'.$e->getMessage();
file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
}
if (!ini_get('display_errors')) {
ini_set('display_errors', '1');
}
错误消息与此行相关:
while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) {
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
$result
只是一个布尔值,表示查询是否成功。 fetchAll
方法位于PDOStatement
,因此应为:
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
你也在执行错误的声明,它应该是:
$result = $sql->execute();
您使用的方法是在没有事先准备的情况下执行SQL字符串。你可以这样做:
$result = $pdoConnection->exec("SELECT * FROM celebs");
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
答案 1 :(得分:1)
ini_set('display_errors', '1');
include_once '\classes\connectionClass.php';
$con = new connection();
$pdoConnection = $con->connect();
$data = $pdoConnection->query("SELECT * FROM celebs")->fetchAll();
foreach ($data as $row) {
echo $row['firstname'];
echo $row['surname'];
}
这是您需要的所有代码。