当我这样做我的数据库连接时:
$conn = new MySQLi(RUBYDBUSER, RUBYDBNAME, RUBYDBPASS, RUBYDBDATA);
if($conn->errno) {
throw new Exception($conn->connect_error, $conn->connect_errno);
}
Run Code Online (Sandbox Code Playgroud)
我想运行这样的预备语句:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
注意:未定义的变量:第26行的C:\ xampp\htdocs\ruby\app\includes\classes\class.core.php中的conn
查询位于class.core.php和中的连接中global.php.Class.core包含如下:
(global.php)
foreach(glob(RUBY_BASE . '/app/includes/classes/class.*.php') as $class){
include_once($class);
}
Run Code Online (Sandbox Code Playgroud)
任何答案?`
该变量$conn不在您的类方法的范围内.您需要执行以下操作之一:
A.)将$ conn变量传递给您要调用的方法.
public function getSitename($conn) {
$stmt = $conn->prepare("SELECT value FROM cms_options WHERE title = 'sitename' ");
$db->stmt_init();
//and so on...
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
还有许多其他类似的变体,但它们是一般方法