pdo - Call to a member function prepare() on a non

2019-01-02 16:02发布

This code get an error:

Fatal error: Call to a member function prepare() on a non-object in C:\Users\fel\VertrigoServ\www\login\validation.php on line 42

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

What is the possible cause? Another question, What is the equivalent to mysql_num_rows? sorry, I am newbie with pdo

标签: php pdo
9条回答
不流泪的眼
2楼-- · 2019-01-02 16:26

$pdo is undefined. You're not declaring it inside the function, and it isn't being passed in as an argument.

You need to either pass it in (good), or define it in the global namespace and make it available to your function by placing global $pdo at the top (bad).

查看更多
其实,你不懂
3楼-- · 2019-01-02 16:26

The $pdo object isn't in scope within your function.

查看更多
公子世无双
4楼-- · 2019-01-02 16:29

Yes, I also learned this the hard way, you need to open DB connection inside the function. I assumed the connection to the DB would be opened inside the function if I opened before calling the function, but no. So:

function whatever(){ 
  //OPEN DB CONNECTION

  CODE

  //CLOSE DB
return whateverValue;
} 
查看更多
无色无味的生活
5楼-- · 2019-01-02 16:38

@Anvd . I had the same problem but I did solve it by connecting the database in the same page not just to include the coonnecting page . It worked for me

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

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

?>
查看更多
孤独寂梦人
6楼-- · 2019-01-02 16:39

In regards the equivalent of mysql_num_rows in PDO is basically FETCH_NUM it return a index number of the selected row.

查看更多
长期被迫恋爱
7楼-- · 2019-01-02 16:44

try this code

$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;
}
查看更多
登录 后发表回答