关联数组到字符串转换

时间:2014-01-26 23:39:58

标签: php arrays pdo associative-array

我看了一下这个问题的一些相关答案,但找不到适用于这个案例的答案。

$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

4 个答案:

答案 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()