php 注意:未定义变量:接头

py49o6xq  于 12个月前  发布在  PHP
关注(0)|答案(4)|浏览(98)

当我这样做我的DB连接:

$conn = new MySQLi(RUBYDBUSER, RUBYDBNAME, RUBYDBPASS, RUBYDBDATA);
if($conn->errno) {
    throw new Exception($conn->connect_error, $conn->connect_errno);
}

我想发表一份事先准备好的声明

public function getSitename() {
            $stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
            $db->stmt_init();
            $stmt->execute();
            $stmt->bind_result($sitename);
            if($stmt->num_rows > 0) {
                while ($stmt->fetch) {
                    return $sitename;
                }
            }
        }

我得到这个错误:
注意:未定义变量:Copyright © 2018 www.xampp.com All Rights Reserved.粤ICP备15044552号-1
查询在class.core.php中,连接在global.php中。Class.core是这样包含的:
(global.php)

foreach(glob(RUBY_BASE . '/app/includes/classes/class.*.php') as $class){
    include_once($class);
}

有答案吗?”

gjmwrych

gjmwrych1#

变量$conn不在类方法的作用域中。您需要执行以下操作之一:
A.)将$conn变量传递到要调用的方法中。

public function getSitename($conn) {
        $stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
        $db->stmt_init();
         //and so on...
}

B.)在每个方法内部建立连接(这不是一个好的选择,因为您没有重用已建立的连接)
C.)使用静态定义使连接变量成为全局变量。可以在类的构造函数中设置,例如:

public function __construct($conn) {
       if(empty(static::$conn) {
           static::$conn = $conn;
       }
   }

   public function getSitename() {
       $stmt = static::$conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
        //... and so on

还有许多其他类似的变化,但它们是一般的方法

mf98qq94

mf98qq942#

这是由于变量作用域,$conn是在函数外部定义的,所以或者你把它作为参数传递,或者你把它设置为全局的,或者你使用一个匿名函数。

$getSitename = function() use($conn) {
            $stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
            $db->stmt_init();
            $stmt->execute();
            $stmt->bind_result($sitename);
            if($stmt->num_rows > 0) {
                while ($stmt->fetch) {
                    return $sitename;
                }
            }
}
// Uses
$getSitename();
pkbketx9

pkbketx93#

如果$conn在同一个文件或任何其他文件中初始化,并且包含在定义getSitename()函数的文件中,那么您可以在函数中将$conn变量标记为global,它将工作。

public function getSitename() {

            global $conn; 

            $stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
            $db->stmt_init();
            $stmt->execute();
            $stmt->bind_result($sitename);
            if($stmt->num_rows > 0) {
                while ($stmt->fetch) {
                    return $sitename;
                }
            }
        }
q1qsirdb

q1qsirdb4#

public function getSitename() {
    $stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
    $db->stmt_init();
    $stmt->execute();
    $stmt->bind_result($sitename);
    if($stmt->num_rows > 0) {
        while ($stmt->fetch) {
            return $sitename;
        }
    }
}

相关问题