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