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; }