3

我在 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.");
4

3 回答 3

11

这是一个变量范围问题。您需要传递$conngetSiteName()

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来访问连接。

于 2013-04-15T06:47:18.153 回答
1
  $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"];
 }
于 2013-04-15T06:52:07.620 回答
0

您是否为 $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());
}
?>
于 2013-04-15T06:46:39.593 回答