0

次の接続ファイルがあります...

<?php
session_start(); 

// Create new mysql connection object
$DBConnect = @new mysqli("localhost","root","","Ladle");
?>

次のスクリプトに含めます...

<?php ob_start() ?>
<?php session_start() ?>
<?php
//Connects to the database
include("inc_LadleDB.php");
$this->DBConnect = $DBConnect;

// Get the e-mail address entered
$email = $_POST['user_email'];

$sql = $this->DBConnect->mysql_query("SELECT * FROM tblEmployees WHERE fldEmail='".
                            $email."'") or die(mysql_error());

$Result = mysql_fetch_assoc($sql);

//validate email fo valid maine account
if($Result)
{ ...

これを実行しようとしましたが、「オブジェクト コンテキストでないときに $this を使用しています」というエラーが発生しました。私は単純なクエリを実行する必要があり、OO PHP を扱いたくないのですが、mysql が非推奨になったため、選択の余地がありません。付属の接続ファイルを参照して、この OO ファイルで SELECT クエリを実行するにはどうすればよいですか?

4

3 に答える 3

2

$thisPHP のクラス用に予約されているキーワードです。手順に従ってクエリを実行しているため、$this->前提条件は必要ありません。

mysqli次のように、コード内でオブジェクトを簡単に使用できます。

$DBConnect = new mysqli("localhost","root","","Ladle");

// Get the e-mail address entered
$email = $_POST['user_email'];

$sql = $DBConnect->query("SELECT * FROM tblEmployees WHERE fldEmail='".
                            $email."'");

$Result = $DBConnect->fetch_assoc($sql);

//validate email fo valid maine account
if($Result)
{ ...

参考までに、@エラーを超えるために使用するのは悪い習慣です。try { } catch() { }ブロックを使用して実際にエラーを処理する必要があります。

第二に、あなたのコードはSQLインジェクションに対して脆弱です。

于 2013-11-14T22:13:45.347 に答える
1

mysqli が OO インターフェイスを提供するからといって、コードを OO スタイルで書かなければならないというわけではありませ。アプリケーションでは通常の関数と変数をそのまま使用できます。

$email = $DBConnect->real_escape_string($_POST['user_email']);

$sql = $DBConnect->query("SELECT * FROM tblEmployees WHERE fldEmail='".
                        $email."'") or die($DBConnect->error);

$Result = $sql->fetch_assoc();
于 2013-11-14T22:13:17.337 に答える
0

OO と関数呼び出しが混在しているため、混乱が生じています。関数は関数mysql_*と同じではないmysqli_*ため、どこにいてmysql_*も間違っています。

また、これをしないでください: DBConnect->mysql_query. DBConnect は MySQLi のインスタンスなので、 を呼び出すだけDBConnect->queryです。

于 2013-11-14T22:13:09.153 に答える