1

Postgres でプリペアド ステートメントを使用して複数の値を追加できますか? を使用して準備済みステートメントに追加されるのを見たときarray($val)、テーブルに入れる値の配列を提供できるはずだと思いました。これは非常に間違っていますか?私が試したとき、私は自分のdbテーブルでのみ見ましたArray。それが実際の配列かどうかはわかりませんが、列は単純なので、単語だけだと思いますcharacter variable

$tag    =  array('item1', 'item2', 'item3');

// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", "INSERT INTO $table ($column) VALUES ($1)");

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
$result = pg_execute($dbconn, "my_query", array("$tag"));

それ以外の場合、1 つの値が配列として提供されるのはなぜですか?

4

2 に答える 2

1

いいえ、そうではありません。テキスト配列を挿入しました... $column のタイプがテキストの場合、コードは読み取る必要があります

$tag    =  array('item1', 'item2', 'item3');

// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", "INSERT INTO $table ($column) VALUES ($1)");

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
foreach( $tag as $i )
    $result = pg_execute($dbconn, "my_query", array($i));
/// alternatively you could try this if you really wanna insert a text as array of text without using text[] type - uncomment line below and comment the 2 above
// $result = pg_execute($dbconn, "my_query", array(json_encode($tag)));

または、$column を配列として postgresql で有効な text[] として定義した場合、コードは次のようになります。

$tag    =  array('item1', 'item2', 'item3');

// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", "INSERT INTO $table ($column) VALUES ($1)");

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
$tmp = json_encode($tag);
$tmp[0] = '{';
$tmp[strlen($tmp) - 1] = '}';
$result = pg_execute($dbconn, "my_query", array($tmp));
于 2012-09-17T20:52:41.507 に答える
0

シリアル化を試みることができます:

$tag = array('item1', 'item2', 'item3');
$tag = serialize($tag);
// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", "INSERT INTO $table ($column) VALUES ($1)");

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
$result = pg_execute($dbconn, "my_query", $tag);

次に、DB から PHP 配列として取得する場合は、シリアル化を解除します。

于 2012-09-17T20:48:31.460 に答える