pdo – 调用一个非对象的成员函数prepare()

此代码出现错误

致命错误:调用第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php中的非对象的成员函数prepare()

码:

function repetirDados($email) { if(!empty($_POST['email'])) { $query = "SELECT email FROM users WHERE email = ?"; $stmt = $pdo->prepare($query); // error line: line 42 $email = mysql_real_escape_string($_POST['email']); $stmt->bindValue(1, $email); $ok = $stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($results == 0) { return true; } else { echo '<h1>something</h1>'; return false; } } } 

可能的原因是什么? 另一个问题 ,什么是相当于mysql_num_rows ? 对不起,我是pdo的新手

$pdo是未定义的。 你不是在函数内部声明它,而是不作为参数传入。

您需要将它传递给(好的),或者将其定义在全局名称空间中,并通过将global $pdo放置在顶部(坏)使其可用于您的函数。

您可以在同一个php页面中build立数据库连接的function,并随时调用该function。 如,

 public function connection() { $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); } public function1() { this->connection(); // now you have the connection.. now, time for to do some query.. } public function2() { this->connection(); // now do query stuffs.. } 

或者,只要您每次需要时都可以简单地在该页面中写入数据库连接线。 如,

 public function a() { // connecting DB for this function a only... $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); // bla bla bla... } public function b() { // connecting DB for this function b only... $dbc = new PDO("mysql:host=localhost;dbname=chat","root",""); // abra ke dabra... boom } 

$pdo对象不在你的函数内。

在PDO中相当于mysql_num_rows基本上是FETCH_NUM,它返回所选行的索引号。

@Anvd。 我有同样的问题,但我通过连接数据库在同一个页面,而不是只包括连接页面解决它。 它为我工作

 <?php try { $pdo = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf-8','root',''); } catch(PDOException $e){ echo 'Connection failed'.$e->getMessage(); } ?> 

我得到了同样的错误:然后,我看到我closures了PDO连接后打电话给我的class级。

是的,我也很难学会,你需要在函数内部打开DB连接。 我假设连接到数据库将被打开函数内,如果我打开之前调用函数,但没有。 所以:

 function whatever(){ //OPEN DB CONNECTION CODE //CLOSE DB return whateverValue; } 

您也可能会从活动的,无缓冲的查询仍然有效。

所以,在第41行,

 $stmt = null; 

试试这个代码

 $query =$pdo->prepare("SELECT email FROM users WHERE email = ?"); $email = mysql_real_escape_string($_POST['email']); $stmt->bindValue(1, $email); $ok = $stmt->execute(); $results = $query->fetchAll(PDO::FETCH_ASSOC); if ($results == 0) { return true; } else { echo '<h1>something</h1>'; return false; }