Pdo - вызов функции-члена prepare() для не объекта

Этот код получает ошибку:

Неустранимая ошибка: вызов функции-члена prepare() для не-объекта в C:\Users\fel\VertrigoServ\www\login\validation.php в строке 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;
            }
        }
    }

Какова возможная причина? Другой вопрос: что эквивалентно mysql_num_rows? извините, я новичок с pdo

Ответы

Ответ 1

$pdo - undefined. Вы не объявляете его внутри функции, и он не передается в качестве аргумента.

Вам нужно либо передать его (хорошо), либо определить его в глобальном пространстве имен и сделать его доступным для вашей функции, поместив global $pdo вверху (плохой).

Ответ 2

Вы можете выполнить функцию соединения с базой данных на одной и той же 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
}

Ответ 3

Объект $pdo не входит в область вашей функции.

Ответ 4

В отношении эквивалента mysql_num_rows в PDO в основном FETCH_NUM он возвращает индексный номер выбранной строки.

Ответ 5

Вы также можете получить эту ошибку из активных, небуферизованных запросов, которые все еще активны.

поэтому на строке 41

$stmt = null;

Ответ 6

@Anvd. У меня была та же проблема, но я ее разрешил, подключив базу данных на той же странице, чтобы не только включить страницу coonnecting. Это сработало для меня

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

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

?>

Ответ 7

Я получал ту же ошибку: Затем я увидел, что я вызвал свой класс после того, как я закрыл PDO-соединение.

Ответ 8

Да, я также усвоил это, вам нужно открыть DB-соединение внутри функции. Я предположил, что соединение с БД будет открыто внутри функции, если я открыл ее до вызова функции, но нет. Итак:

function whatever(){ 
  //OPEN DB CONNECTION

  CODE

  //CLOSE DB
return whateverValue;
} 

Ответ 9

попробуйте этот код

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