【发布时间】:2017-10-18 15:05:22
【问题描述】:
我得到了
致命错误:在非对象上调用成员函数 query() C:...\test.php 第 27 行
拨打callQuery2之后。
<?php
dbConnect();
callQuery1();
callQuery2();
function callQuery1(){
// SQL query
$q = "SELECT * FROM table1 WHERE name like 'john%' ";
// Execute query
$data1 = exeQuery($q);
}
function callQuery2(){
// SQL query
$q = "SELECT * FROM table2 WHERE event = 'holiday' ";
// Execute query
$data2 = exeQuery($q);
}
// Execute SQL Query
function exeQuery($qry) {
global $pdo;
####### LINE 27 #######
$stmt = $pdo->query($qry);
if($stmt = $pdo->prepare($qry)) {
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
return $data;
}
}
// database connection
function dbConnect(){
$DBSERVER = "***";
$DBUSER = "***";
$DBPASS = "***";
$DBNAME = "***";
// OBDC
try {
$pdo = new PDO("odbc:DRIVER={SQL Server};Server={$DBSERVER};Database={$DBNAME}", $DBUSER, $DBPASS);
// set the PDO error mode to exception
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//die(json_encode(array('outcome' => true)));
}
catch(PDOException $ex) {
//die(json_decode(array('outcome' => false, 'message' => 'Unable to connect')));
}
}
?>
为什么错误只出现在那个时间之后? 有更好的方法吗?
问候, 埃利奥·费尔南德斯
【问题讨论】:
-
globals...yuk。只需将 $pdo 对象传递给您的 exeQuery 函数。即使
global $pdo;实际上工作,似乎 $pdo 还没有被实例化。 dbConnect() 应该返回它创建的 $pdo 对象,因此您可以将它传递给其他函数。 -
Adyson,您介意在我发布的代码中进行您所说的更改吗?
标签: php sql-server database