我试图在PHP中创建一个连接类来连接数据库数据,但行上出现一个错误:
const USER = "{$value['user_DB']}";
const PASS = "{$value['password_DB']}";
致命错误:常量表达式在第21行的C:\ xampp \ htdocs \ dev \ davinci \ classes \ Conexao_Teste.class.php中包含无效操作
<?php
require_once"../classes/configDB.class.php";
abstract class conection extends configDB{
private $valor;
private $instanceConfigDB;
public function listDB(){
$valor = $instanceConfigDB->listconfigDB();
foreach($valor as $value){
echo "Banco: ID:{$value['id_db']} - Hostname:{$value['hostname']} - DBNAME:{$value['dbname']} - User:{$value['user_DB']} - PASS:{$value['password_DB']}<br>";
}
}
const USER = "{$value['user_DB']}";
const PASS = "{$value['password_DB']}";
private static $instance = null;
private static function conect(){
try {
if(self:: $instance==null):
$dsn = "mysql:host={$value['hostname']};dbname={$value['dbname']};charset=utf8";
self::$instance = new PDO($dsn, self::USER, self::PASS);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
endif;
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}
return self::$instance;
}
protected static function getDB() {
return self::conect();
}
}
?>
你应该用
define('USER', "{$value['user_DB']}");
因为const将在编译时进行评估,其中定义将在运行时进行评估。
你试图在它定义的范围之外使用$ value [],这就是你得到这些错误的原因。
$ value []在方法listDB()中声明。如果要在方法之外使用该值,则必须在方法之外声明变量。
//Declaring variables and constants
private $valor;
private $instanceConfigDB;
private $username;
private $pass;
private $hostname;
private $dbname;
public function listDB(){
$valor = $instanceConfigDB->listconfigDB();
foreach($valor as $value){
echo "Banco: ID:{$value['id_db']} - Hostname:{$value['hostname']} - DBNAME: {$value['dbname']} - User:{$value['user_DB']} - PASS:{$value['password_DB']}<br>";
//Initialize your data
$username = $value[user_DB];
$pass = $value[password_DB];
....
}
}
至少通过这种方式,您的数据可以在方法之外访问
您的connect方法将如下所示:
private static function conect(){
try {
if(self:: $instance==null):
$dsn = "mysql:host={$hostname};dbname={$dbname};charset=utf8";
self::$instance = new PDO($dsn, self::$username, self::$pass);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
endif;
} catch (PDOException $e) {
echo "Erro: " . $e->getMessage();
}