Этот код получает ошибку :
Неустранимая ошибка: вызов функции-члена 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
$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; }