1

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

4

1 回答 1

2

PDOStatement::errorInfo()返回一个数组,但您直接回显它,这将始终导致字符串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_NOTICEfor 数组到字符串的转换是 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
于 2013-04-24T18:51:39.253 回答