2013-02-12 106 views
1

我不能让PHP postgre从PHP阵列new_address执行插入一排,使用此代码:插入行PGSQL使用PDO

$customer_id = '2319'; 
    $use_frequency = 1; 

    $sth = $dbh->prepare(" 
    INSERT INTO address 
      ('storeid', 
      'classtypeid', 
      'modifiedbyuser', 
      'modifiedbycomputer', 
      'modifieddate', 
      'seqid', 
      'issystem', 
      'isactive', 
      'streetaddress1', 
      'streetaddress2', 
      'city', 
      'state', 
      'county', 
      'postalcode', 
      'country', 
      'formattedtext', 
      'taxclassid', 
      'isvalidated', 
      'validatedaddress', 
      'hasvalidationerror', 
      'validationerror', 
      'customer_id', 
      'use_frequency') 
    VALUES (NULL, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
      :address_1, 
      :address_2, 
      :city, 
      :state, 
       NULL, 
      :zip, 
      :country, 
      :formatted_text, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
       NULL, 
      :customer_id, 
      :use_frequency"); 



$sth->execute(array(
    ':address_1' => $new_address['address_1'], 
    ':address_2' => $new_address['address_2'], 
    ':city' => $new_address['city'], 
    ':state' => $new_address['state'], 
    ':zip' => $new_address['zip'], 
    ':country' =>$new_address['country'], 
    ':formatted_text' => $formatted_text, 
    ':customer_id' => $customer_id, 
    ':use_frequency' => $use_frequency 
    );   


$sth->execute(); 

在表格的最后一栏是id,这是一个serial所以我省略了它,认为它会自动递增,但请告诉我,如果我错了。

我收到错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "'storeid'" LINE 3: ('storeid', ^' in

print_r($new_address);显示我:

Array (
[0] => stdClass Object (
[customer_id] => 9319 
) 
[1] => stdClass Object (
[address_1] => 1515 example st 
) 
[2] => stdClass Object (
[address_2] => box 1 
) 
[3] => stdClass Object (
[city] => town 
) 
[4] => stdClass Object (
[state] => ST 
) 
[5] => stdClass Object (
[zip] => 12345 
) 
[6] => stdClass Object (
[country] => US 
) 
) 

感谢您的咨询!

回答

1

4.1. Lexical Structure,你必须用双引号"

There is a second kind of identifier: the delimited identifier or quoted identifier. It is formed by enclosing an arbitrary sequence of characters in double-quotes ("). A delimited identifier is always an identifier, never a key word. So "select" could be used to refer to a column or table named "select", whereas an unquoted select would be taken as a key word and would therefore provoke a parse error when used where a table or column name is expected.

INSERT INTO address 
     ("storeid", 
     "classtypeid", 
     ... 

此外逃脱的列名,如果为列NULL设置默认值,你可以从列列表中省略掉只使用那些你真正需要的

insert into address 
    ("streetaddress1", 
    "streetaddress2", 
    "city", 
    "state", 
    ...) 
values (:address_1, 
     :address_2, 
     :city, 
     :state, 
     ...) 

从您的意见,您必须修改$new_address阵列。它被数字索引,并且不是的名称。

如果你可以改变JSON到

{ "customer_id": 9319, 
    "address_1": "1515 example trail", 
    "address_2": "box 1", 
    "city": "town city", 
    "state": "MI", 
    "zip": "12345", 
    "country": "US" } 

可以使用

$new_address = json_decode($json, true); 

得到一个关联数组。

如果你不能改变的JSON,你必须将其映射到一个关联数组

$json = json_decode('[ { "customer_id": 9319 }, { "address_1": "1515 example trail" }, { "address_2": "box 1" }, { "city": "town city" }, { "state": "MI" }, { "zip": "12345" }, { "country": "US" } ]'); 

foreach ($json as $element) { 
    foreach ($element as $key => $val) { 
     $new_address[$key] = $val; 
    } 
} 
+0

感谢。我改变了这一点。我现在得到错误:致命错误:带有消息'SQLSTATE [42601]的未捕获异常'PDOException':语法错误:7错误:输入结束时的语法错误行48:$ 9 ^'' – 1252748 2013-02-12 23:44:10

+0

@thomas这将是最后一次线。在你的陈述中添加一个结束语“'''。 – 2013-02-12 23:46:57

+0

啊哈。大。我现在(当然)得到以下错误:'序列地址_id_seq1'。这很奇怪。因为我没有名为'address_id_seq'的列。这可能是最后一个autoincrement'id'列的问题吗? – 1252748 2013-02-12 23:52:40