【问题标题】:How to use PHP mysqli() in a non-object oriented environment如何在非面向对象的环境中使用 PHP mysqli()
【发布时间】:2013-11-14 22:08:22
【问题描述】:

我有以下连接文件...

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

【问题讨论】:

  • mysql_* != mysqli_*,您可以在示例#1-> 程序样式中的mysqli 中找到解决方案
  • 您不能同时调用mysql_*()mysqli_*()。单独使用mysqli,因为mysql 已被弃用。
  • 对 OP 的问题:mysqli 文档没有显示如何按程序调用所有函数吗?您从哪里得到必须使用 OO 才能使用它们的想法?
  • @Barmar 我的错,我没有注意到手册中有关于 OO 和程序调用的部分

标签: php mysql oop mysqli


【解决方案1】:

$this 是为 PHP 中的类保留的关键字。由于您以程序方式运行查询,因此不需要$this-&gt; 先决条件。

您可以在代码中轻松使用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 injection 的攻击 - 因此您最好查看Prepared Statements

【讨论】:

  • 对虚幻的投反对票的人,也请解释一下,而不是鲁莽地点击投反对票按钮。这也适用于 Barmar 的回答...
  • 恰恰相反。 try { } catch() { } 块不应该用于处理错误消息
  • 所以你会建议超过try { } catch() { }?
  • @BenM 谢谢,这说明了很多,我在别处找不到任何解释这个的东西!
【解决方案2】:

仅仅因为 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();

【讨论】:

  • 非常感谢您的帮助!
【解决方案3】:

您将 OO 和函数调用混合在一起,这导致您感到困惑。 mysql_* 函数与 mysqli_* 函数不同,所以 mysql_* 的任何地方都是错误的。

另外,不要这样做:DBConnect-&gt;mysql_query。 DBConnect 是 MySQLi 的一个实例,因此只需调用 DBConnect-&gt;query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多