【问题标题】:Query to insert database PDO with foreach使用 foreach 查询插入数据库 PDO
【发布时间】:2018-04-06 00:43:51
【问题描述】:

如何在数据库 PDO 中插入此查询?

    public function insertPessoa($estado){

                $this->$estado = $estado;

                echo "<pre>";
                $linkDeputados =

 file_get_contents('https://dadosabertos.camara.leg.br/api/v2/deputados?siglaUf='.$estado.'&ordem=ASC&itens=100&ordenarPor=nome&pagina=1');
            $json = json_decode($linkDeputados);
            $deputados = (object) $json;
            $connectar = new PDO("pgsql:host=localhost; dbname=postgres", "postgres", "123456");


            foreach ($deputados->dados as $objeto => $o)
            {
                $sql = " INSERT INTO  deputados 
                                            (   id,
                                                'nome', 
                                                'estado',
                                                'web_partido', 
                                                'sigla_partido',
                                                'url_foto'
                                            ) 

                        VALUES
                                            (   
                                                 {$o->id},
                                                '{$o->nome}', 
                                                '{$o->siglaUf}', 
                                                '{$o->uriPartido}', 
                                               '{$o->siglaPartido}',
                                                '{$o->urlFoto}'

                                            )";

            }

            $query = $connectar->prepare($sql);
            $query->bindValue(':id', $o->id);
            $query->bindValue(':nome', $o->nome);
            $query->bindValue(':estado', $o->siglaUf);
            $query->bindValue(':web_partido', $o->uriPartido);
            $query->bindValue(':sigla_partido', $o->siglaPartido);
            $query->bindValue(':url_foto', $o->urlFoto);

            $query->execute();

            if($query){
                echo 'Registro Inseridos com Sucesso!<br>';
            }

        }

这给我一个错误:

警告:PDOStatement::bindValue(): SQLSTATE[HY093]: 无效 参数号::id in C:\xampp\htdocs\pesquisaDeputados\pessoa.class.php 第 79 行

【问题讨论】:

  • 这个函数是一个类的一部分,你是否在每个函数中创建一个新的 pdo 连接,isso que você está fazendo?
  • 是的,这个功能是我班级的一部分,我也使用 de PDO 连接来实现其他功能......这是错误的吗?
  • 我认为foreach 循环应该在$query-&gt;execute(); 之后关闭,而不是在$query = $connectar-&gt;prepare($sql); 之前关闭
  • 您应该为数据库连接创建一个新类,然后将连接注入您的类,这样您就不会一遍又一遍地创建新连接。蟒蛇排序。

标签: php database pdo


【解决方案1】:

Mysqli 在你的 sql 查询中没有找到 :id 字符串,因为你注入的对象没有使用准备好的语句

你的sql语句应该是:

$sql = " INSERT INTO  deputados 
                                        (   id,
                                            'nome', 
                                            'estado',
                                            'web_partido', 
                                            'sigla_partido',
                                            'url_foto'
                                        ) 

                    VALUES
                                        (   
                                             :id,
                                            :nome, 
                                            :estado, 
                                            :uri_partido, 
                                            :sigla_partido,
                                            :url_foto

                                        )";

你需要绑定参数而不是值

【讨论】:

  • 嗨,伙计!好的,但是我看到了文档,我的问题是...我使用 de foreach 来交互对象所有者,这种情况在 {$o->uriPartido} 访问我的对象的值...请参阅:object(stdClass)# 39 (8) { ["id"]=> int(160569) ["uri"]=> string(58) "dadosabertos.camara.leg.br/api/v2/deputados/160569"; ["nome"]=> 字符串(16) "WALDENOR PEREIRA" ["siglaPartido"]=> 字符串(2) "PT" ["siglaUf"]=> 字符串(2) "BA" ["idLegislatura"]=> int(55) ["urlFoto"]=> 字符串(60) "camara.leg.br/internet/deputado/bandep/160569.jpg";我怎样才能访问这个对象的值??
  • 使用箭头符号$obj-&gt;property
  • 我不需要在查询的VALUES中使用$obj->property来设置foreach里面的值?
  • 你的代码现在应该可以工作了,有什么问题?
  • 我更改代码并继续收到错误消息:
【解决方案2】:

如果您查看文档 (http://php.net/manual/en/pdo.prepare.php),您会发现您应该在插入语句的值列表中使用 :id,:nome,:estado,而不是直接插入值。

【讨论】:

  • 嗨,伙计!好的,但是我看到了文档,我的问题是...我使用 de foreach 来交互对象所有者,这种情况在 {$o->uriPartido} 访问我的对象的值...请参阅:object(stdClass)# 39 (8) { ["id"]=> int(160569) ["uri"]=> string(58) "dadosabertos.camara.leg.br/api/v2/deputados/160569" ["nome"]=> string(16) "WALDENOR PEREIRA" ["siglaPartido "]=> 字符串(2) "PT" ["siglaUf"]=> 字符串(2) "BA" ["idLegislatura"]=> int(55) ["urlFoto"]=> 字符串(60) "@987654323 @" }
猜你喜欢
  • 2014-11-26
  • 2015-04-10
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2016-02-25
相关资源
最近更新 更多