このコードはエラーを取得します:
致命的エラー:42行目のC:\ Users\fel\VertrigoServ\www\login\validation.phpにある非オブジェクトのメンバー関数prepare()の呼び出し
コード:
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
オブジェクトが関数内のスコープ内にありません。
PDOのmysql_num_rowsに相当するものは、基本的に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接続を閉じた後、クラスを呼び出しました。
このエラーは、アクティブでバッファリングされていないクエリがまだアクティブであることから発生する場合もあります。
だから、41行目で、
$stmt = null;
はい、私もこれを難しい方法で学びました。関数内でDB接続を開く必要があります。関数を呼び出す前に開いた場合、関数内でDBへの接続が開かれると仮定しましたが、いいえ。そう:
function whatever(){
//OPEN DB CONNECTION
CODE
//CLOSE DB
return whateverValue;
}