【问题标题】:Mysqli query in function - PHP函数中的 Mysqli 查询 - PHP
【发布时间】:2013-04-07 05:05:44
【问题描述】:

我在 functions.php 中有一个函数列表。我正在从 Mysql 升级到 Mysqli 因为我刚刚学习 Mysql 现在已经贬值了。

我在顶层connect.php 文件中声明我的连接。需要的第一个文件。

无论如何,我的所有函数都使用 mysql_query("QUERY") 并且一直运行良好。现在我将它们全部更改为:

$con->query("QUERY") // ($con is my connection variable)

现在我得到了一个

致命错误:在第 241 行对 C:\wamp\www\PHP\functions.php 中的非对象调用成员函数 query()

我不明白为什么我可以查询我是否在整个文件中声明了我的变量。它应该在任何地方都可以访问,我只是不确定。这使我的网站处于暂停状态,直到我可以解决此问题。这是 functions.php

中的示例函数
function getSiteName()
{
    $row = $con->query("SELECT * FROM siteinfo")->fetch_array();
    return $row["siteName"];
}

我的连接:

global $con ;
$con = new mysqli("localhost", "itunes89", "XXXX","projectanvil") or die("Sorry, were having server connection issues. Please try again later.");

【问题讨论】:

  • 什么是$con?你在哪里声明的?
  • 正如我在问题中所说,我在文件中声明了它。我需要的第一个文件。
  • 在你包含connect.php之后使用global $con;
  • 我已经试过了。

标签: php mysqli


【解决方案1】:

这是variable scope 的问题。您需要将$conn 传递给getSiteName()

function getSiteName($con) {
    $row = $con->query("SELECT * FROM siteinfo")->fetch_array();
    return $row["siteName"];
}

$name = getSiteName($con);

或者使用带有构造函数注入的类:

class MyThing
{
    protected $con;

    public function __construct($con) {
        $this->con = $con;
    }

    public function getSiteName() {
        $row = $this->con->query("SELECT * FROM siteinfo")->fetch_array();
        return $row["siteName"];
    }
}

$obj = new MyThing($con);
$name = $obj->getSiteName();

在整个课程中,您都可以使用$this->con 来访问连接。

【讨论】:

  • 或将其声明为全局。不漂亮,虽然。
  • 我真的必须为我的每个职能部门都这样做吗?我可以创建一个类并在构造函数中传递连接吗?
  • @Jordan 是的,最好使用一个类并将连接存储为属性。
  • @Jordan,添加了类示例。
  • 糟糕的是,我让它工作了。我只是忘记了 $this->mycon。非常感谢!
【解决方案2】:
  $con = new mysqli(
         "localhost", 
         "itunes89", 
          "XXXX",
          "projectanvil"
  );

失败时不会返回 null 或 false。

你应该检查的值

  mysqli_connect_errno()

连接后验证$con是有效的服务器连接。

既然你把 $con 设为全局,要让 getSiteName 函数访问它,你应该写:

 function getSiteName(){
 global $con;
      $row = $con->query("SELECT * FROM siteinfo")->fetch_array();
      return $row["siteName"];
 }

【讨论】:

    【解决方案3】:

    你是否为 $con 对象定义

    <?php
    // connect to the server
    $conn = new mysqli('localhost', 'root', 'pass', 'dbname');
    
    // check connection
    if (mysqli_connect_errno()) {
      exit('Connect failed: '. mysqli_connect_error());
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2015-08-31
      • 2013-09-23
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多