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

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

Неустранимая ошибка: вызов функции-члена prepare () для не-объекта в C: \ Users \ fel \ VertrigoServ \ www \ login \ validation.php в строке 42

КОД:

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

Solutions Collecting From Web of "pdo – вызов функции-члена prepare () для не-объекта"

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

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

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

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

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

@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(); } ?> 

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

Да, я также усвоил этот трудный путь, вам нужно открыть соединение 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; }