我看了一下这个问题的一些相关答案,但找不到适用于这个案例的答案。
$DatabaseConfig = array('DB_TYPE' => 'MySQL',
'DB_HOST' => 'localhost',
'DB_NAME' => 'simpleCMS',
'DB_USER' => 'root',
'DB_PASS' => 'mypass');
$dsn = $this->DatabaseConfig['DB_TYPE'].':host='.$this->DatabaseConfig['DB_HOST'].';dbname='.$this->DatabaseConfig;
我收到Notice: Array to string conversion
并且没有联系
当我手动插入参数时,一切正常。
在这种情况下,如何将键值转换为字符串?我尝试将(string)
放在不同的地方,但没有运气
此外,略有不相关,但如果有人有任何想法使$dsn
稍微冗长一点?我找不到更清洁的设计。
修改
谢谢大家指出我刚刚错过了最后一个参数。 Notice: Array to string conversion
不再可见
然而,我遇到了一个新的致命错误:
Fatal error: Call to undefined method PDOException::query()
和PDO例外:
exception 'PDOException' with message 'could not find driver'
但是,当我手动输入参数时,连接工作正常
为什么不接受当前格式的$dsn
?
答案 0 :(得分:0)
根据您提供的内容,以下是如何访问阵列。不确定为什么使用对象表示法?
$DatabaseConfig = array('DB_TYPE' => 'MySQL',
'DB_HOST' => 'localhost',
'DB_NAME' => 'simpleCMS',
'DB_USER' => 'root',
'DB_PASS' => 'mypass');
$dsn = $DatabaseConfig['DB_TYPE'].':host='.$DatabaseConfig['DB_HOST'].';dbname='.$DatabaseConfig**['DB_NAME']**;
(您错过了DB_NAME密钥)
但是,您在原始脚本中也遇到了'; dbname ='的问题。$ DatabaseConfig;
请注意,您没有指定要访问的数组键。您只指定了$ DatabaseConfig。这是出现“Array to string”错误的地方。
答案 1 :(得分:0)
您的最终设置似乎缺失($ this-> DatabaseConfig ['DB_NAME']):
$DatabaseConfig = array('DB_TYPE' => 'MySQL',
'DB_HOST' => 'localhost',
'DB_NAME' => 'simpleCMS',
'DB_USER' => 'root',
'DB_PASS' => 'mypass');
$dsn = $this->DatabaseConfig['DB_TYPE'].':host='.$this->DatabaseConfig['DB_HOST'].';
dbname='.$this->DatabaseConfig['DB_NAME'];
答案 2 :(得分:0)
$dsn = $this->{DatabaseConfig}['DB_TYPE'].':host='.$this->{DatabaseConfig}['DB_HOST'].';dbname='.$this->{DatabaseConfig};
答案 3 :(得分:0)
PDO驱动程序名称显然区分大小写。使用mysql
代替MySQL
$DatabaseConfig = array('DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_NAME' => 'simpleCMS',
'DB_USER' => 'root',
'DB_PASS' => 'mypass');
作为引起关注的其他原因,此错误消息表示您已尝试在实际为query()
的对象上调用PDOException
。您建立PDO对象的try/catch
逻辑需要额外注意,尽管您尚未发布它。验证您存储PDO对象的变量是否在某处被异常处理...
致命错误:调用未定义的方法PDOException :: query()