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

$this是为 PHP 中的类保留的关键字。由于您以程序方式运行查询,因此不需要$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 注入的影响——因此您最好查看Prepared Statements

于 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 回答