【问题标题】:Associative array to string conversion关联数组到字符串的转换
【发布时间】:2014-01-26 23:39:57
【问题描述】:

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

$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()
还有 PDOException:
exception 'PDOException' with message 'could not find driver'

但同样,当我手动输入参数时,连接工作正常。
为什么不接受当前格式的$dsn

【问题讨论】:

  • 也许你的本意是$this->DatabaseConfig = array(...);
  • 你最后需要';dbname='.$this->DatabaseConfig['DB_NAME']。 (最后你错过了['DB_NAME']。)
  • 更新后,您需要发布更多代码。您以某种方式调用了 query() 来处理从 PDO 故障中捕获的异常。将代码发布到建立连接的位置,以及调用query() 的位置。
  • 哦,我不知道PDO驱动是否区分大小写。将其设为小写...'DB_TYPE' => 'mysql',
  • @MichaelBerkowski 'DB_TYPE' => 'mysql' 有效。您可能想将其添加到您的答案中,我会接受它。谢谢。

标签: php arrays pdo associative-array


【解决方案1】:

PDO 驱动程序名称显然区分大小写。使用mysql 而不是MySQL

$DatabaseConfig = array('DB_TYPE' => 'mysql',
                        'DB_HOST' => 'localhost',
                        'DB_NAME' => 'simpleCMS',
                        'DB_USER' => 'root',
                        'DB_PASS' => 'mypass');

另外一个值得关注的原因是,此错误消息意味着您尝试在一个实际上是PDOException 的对象上调用query()。您在其中建立 PDO 对象的 try/catch 逻辑需要额外注意,尽管您尚未发布它。验证您存储 PDO 对象的变量不会被异常处理重用...

致命错误:调用未定义的方法 PDOException::query()

【讨论】:

    【解决方案2】:

    根据您提供的内容,以下是访问数组的方法。不确定为什么要使用对象表示法?

    $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。这就是发生“数组到字符串”错误的地方。

    【讨论】:

    • 对象表示法被认为是由于修剪过的代码,它出现在某处的对象方法中。
    【解决方案3】:

    您的最终设置似乎丢失了 ($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'];
    

    【讨论】:

      【解决方案4】:
      $dsn = $this->{DatabaseConfig}['DB_TYPE'].':host='.$this->{DatabaseConfig}['DB_HOST'].';dbname='.$this->{DatabaseConfig};
      

      【讨论】:

        猜你喜欢
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多