簡體   English   中英

如何在非面向對象的環境中使用PHP mysqli()

[英]How to use PHP mysqli() in a non-object oriented environment

我有以下連接文件...

<?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查詢?

$this是為PHP中的類保留的關鍵字。 由於您以過程方式運行查詢,因此不需要$this->先決條件。

您可以輕松地在mysqli內使用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

僅僅因為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();

您將OO和函數調用混為一談,這使您感到困惑。 mysql_*函數與mysqli_*函數是不同的,因此在您擁有mysql_*任何地方都是錯誤的。

另外,不要這樣做: DBConnect->mysql_query DBConnect是MySQLi的實例,因此只需調用DBConnect->query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM