pdo - 在非对象上调用成员函数prepare()

时间:2011-03-17 22:43:00

标签: php pdo

此代码错误

  

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

CODE:

   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的新手

9 个答案:

答案 0 :(得分:20)

$pdo未定义。你没有在函数中声明它,也没有作为参数传入。

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

答案 1 :(得分:4)

您可以在同一个php页面中创建数据库连接功能。随时调用该函数。如,

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
}

答案 2 :(得分:2)

$pdo对象不在您的函数范围内。

答案 3 :(得分:1)

@Anvd。我遇到了同样的问题,但我确实通过在同一页面中连接数据库来解决它,而不仅仅是包含联合页面。它对我有用

<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf-8','root','');

} catch(PDOException $e){
echo 'Connection failed'.$e->getMessage();
}

?>

答案 4 :(得分:1)

关于PDO中等效的mysql_num_rows基本上是FETCH_NUM,它返回所选行的索引号。

答案 5 :(得分:0)

您也可能从仍处于活动状态的活动,无缓冲查询中收到此错误。

所以,在第41行,

$stmt = null;

答案 6 :(得分:0)

我遇到了同样的错误:然后我看到在关闭PDO连接后打电话给我的班级。

答案 7 :(得分:0)

是的,我也学到了这个困难的方法,你需要在函数内部打开DB连接。如果我在调用函数之前打开了,我假设在函数内部将打开与DB的连接,但是没有。所以:

function whatever(){ 
  //OPEN DB CONNECTION

  CODE

  //CLOSE DB
return whateverValue;
} 

答案 8 :(得分:-1)

试试这段代码

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