PHP注意:数组转换为字符串

时间:2013-04-24 18:46:56

标签: php postgresql type-conversion

我似乎无法弄清楚这一点。我写了一个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

1 个答案:

答案 0 :(得分:2)

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