此代码错误:
致命错误:在非对象中调用成员函数prepare() 第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php
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的新手
答案 0 :(得分:20)
$pdo
未定义。你没有在函数中声明它,也没有作为参数传入。
您需要将其传递给(好),或者在全局命名空间中定义它,并通过将global $pdo
置于顶部(坏)使其可用于您的函数。
答案 1 :(得分:4)
您可以在同一个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
}
答案 2 :(得分:2)
$pdo
对象不在您的函数范围内。
答案 3 :(得分:1)
@Anvd。我遇到了同样的问题,但我确实通过在同一页面中连接数据库来解决它,而不仅仅是包含联合页面。它对我有用
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=tish_database;charset=utf-8','root','');
} catch(PDOException $e){
echo 'Connection failed'.$e->getMessage();
}
?>
答案 4 :(得分:1)
关于PDO中等效的mysql_num_rows基本上是FETCH_NUM,它返回所选行的索引号。
答案 5 :(得分:0)
您也可能从仍处于活动状态的活动,无缓冲查询中收到此错误。
所以,在第41行,
$stmt = null;
答案 6 :(得分:0)
我遇到了同样的错误:然后我看到在关闭PDO连接后打电话给我的班级。
答案 7 :(得分:0)
是的,我也学到了这个困难的方法,你需要在函数内部打开DB连接。如果我在调用函数之前打开了,我假设在函数内部将打开与DB的连接,但是没有。所以:
function whatever(){
//OPEN DB CONNECTION
CODE
//CLOSE DB
return whateverValue;
}
答案 8 :(得分:-1)
试试这段代码
$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;
}