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_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
于 2013-04-24T18:51:39.253 に答える