【问题标题】:PHP Notice: Array to string conversion inPHP 注意:数组到字符串的转换
【发布时间】:2013-04-18 11:13:02
【问题描述】:

我似乎无法弄清楚这一点。我编写了一个 PHP 脚本,并且在尝试执行 postgres 查询时,我不断收到 数组到字符串的转换... 注意作为错误:

$tables = array(array('a','table1'),array('c','table2'));
$table = $tables[0][1];
$query = "SELECT * FROM " . $table . " WHERE id = :id LIMIT 1";
$select = $dbconn->prepare($query);
$id = $_GET['id'];
if($select->execute()){
}else{
    echo $select->errorInfo();
}

我使用的是 PostgreSQL 版本 9.2.1 和最新的 PHP

【问题讨论】:

    标签: php postgresql type-conversion


    【解决方案1】:

    PDOStatement::errorInfo() returns an array,但你是直接回显它,这将始终导致字符串Array。您必须存储其返回的数组,并访问您希望读取的组件:

    $err = $select->errorInfo();
    print_r($err);
    
    // Example as lifted from PHP docs linked above:
    PDO::errorInfo():
    Array
    (
        [0] => HY000
        [1] => 1
        [2] => near "bogus": syntax error
    )
    

    顺便提一下,用于数组到字符串转换的E_NOTICE 在 PHP 5.4 中是新的。 PHP 5.3 中的相同代码会将Array 输出为字符串,但不会发出E_NOTICE

    由于您使用的是 PHP 5.4,如果您愿意,可以直接取消引用消息 [2]

    // 5.4+ only...
    echo $select->errorInfo()[2];
    

    现在为什么会出现错误:

    至于为什么你首先输入else块来报告错误,你有一个:id的占位符,但是你在执行查询之前从未绑定变量$id

    你可以使用

    $select->execute(array(':id', $id))
    

    或者

    $select->bindParam(':id', $id, PDO::PARAM_INT); // assuming an integer $id. Use PDO::PARAM_STR for strings
    

    【讨论】:

    • 谢谢,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多