За последние 24 часа нас посетили 18838 программистов и 1702 робота. Сейчас ищут 723 программиста ...

Не работает запрос к базе используя PDO-execute

Тема в разделе "PHP для новичков", создана пользователем timur2008, 3 фев 2017.

  1. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    Добрый день. Бьюсь уже вторые сутки не могу понять почему запрос не срабатывает , уже вообще идей нет. Вот код

    PHP:
    1. function __construct() {
    2.         parent::__construct();
    3.         try{
    4.  
    5.          $this->getOrgIdStmt = self::$PDO->prepare("SELECT organisation_id from organization where ident=2234");
    6.         }
    7.         catch (PDOException $e)
    8.         {
    9.             print_r($e->getMessage());
    10.         }
    11.     }
    и далее код вызова
    PHP:
    1. $array = array();
    2.            
    3.             $result =  $this->getOrgIdStmt->execute();
    4.             print_r("!!!!!!!!!!".$result);
    5.             foreach ($result as $row)
    6.             {
    7.                 print_r("result======");
    8.                 print_r($row);
    9.             }
    Пишет варнинг
    Код (Text):
    1. Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\PhpProject1\datamappers\ProblemMapper.php on line 63
    В начале хотел с параметром передавать но он вообще никак не работает :( Поэтому уже вообще без параметра сделал просто как тест. Но он даже так не работает. В таблице такой идентификатор точно есть ,столбец тоже проверял , есть такой :(
     
  2. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    ты бы хоть доки читал.
    https://php.ru/manual/pdostatement.execute.html - возвращает true или false

    таким образом $result у тебя true или false

    ну и как ты его foreach'ить собрался?
     
    timur2008 и alexblack нравится это.
  3. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    блиин спасибо :( а как нить можно так получить результат в виде идентификатора котороый мне нужен?
     
  4. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    Попробовал так сделать
    PHP:
    1. $result = $this->getOrgIdStmt->fetch(PDO::FETCH_ASSOC);
    2.            
    3.             print_r("!!!!!!!!!!".$result[0]);
    но он пишет Undefined offset: т.е получается туда ничего не заносится :((
     
  5. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Я весь твой код не видел, но по кускам это должно быть реализовано примерно так
    PHP:
    1. function __construct() {
    2.         parent::__construct();
    3.         try{
    4.          $this->getOrgIdStmt = self::$PDO->prepare("SELECT organisation_id from organization where ident= :ident");
    5.         }
    6.         catch (PDOException $e)
    7.         {
    8.             print_r($e->getMessage());
    9.         }
    10.     }
    11.  
    12. $arr = [];
    13. $resBool =  $this->getOrgIdStmt->execute([':ident'=>150]);
    14.     if(!$resBool){
    15.         echo 'Что то пошло не так';
    16.     }else{
    17.         $res = $this->getOrgIdStmt->fetchAll();
    18.             //Дальнейшие действия
    19.             foreach(){}
    20.     }
     
  6. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    Да вот так и делаю :(( Вот весь код моего класса
    PHP:
    1. class ProblemMapper extends Mapper{
    2.  
    3.     function __construct() {
    4.         parent::__construct();
    5.         try{
    6. //        $this->selectStmp= self::$PDO->prepare("SELECT * from help where userFK_id =?");
    7.             $this->selectStmp= self::$PDO->prepare("SELECT * from problem where id_user_fk =?");
    8.         $this->updateStmt= self::$PDO->prepare(
    9.                 "UPDATE problem set inn=?, comment=?,status=?,timeproblem=?,contactinfo=?,problemdescription=? where problem_id=?");
    10. //        $this->insertStmt = self::$PDO->prepare("INSERT into help (id_organisation_fk,id_user_fk,start_date,end_date,contactinfo,description) values(?,?,?,?,?,?)");
    11.          $this->insertStmt = self::$PDO->prepare("INSERT into problem (id_organisation_fk,id_user_fk,start_date,end_date,contactinfo,description) values(?,?,?,?,?,?)");
    12.          $this->$getOrgIdStmt = self::$PDO->prepare("SELECT organisation_id from organization where inn=:inn");
    13.         }
    14.         catch (PDOException $e)
    15.         {
    16.             print_r($e->getMessage());
    17.         }
    18.     }
    19.  
    20.     function getCollection(array $raw)
    21.     {
    22.         return new ProblemCollection($raw, $this);
    23.     }
    24.  
    25.      
    26.     protected function doCreateObject(array $array) {
    27.         $stack=array();
    28.         foreach ($array as $value) {
    29.          
    30.             $obj = new Problem($value['problem_id']);
    31.             $obj->setUserKFId($value[1]);
    32.          
    33.             $obj->setStartDate($value[3]);
    34.             $obj->setContactinfo($value[4]);
    35.             $obj->setProblemDescription($value[4]);
    36.             array_push($stack, $obj);
    37.         }
    38.         return $stack;
    39.     }
    40.  
    41.     protected function doInsert(\DomainObject $object) {
    42.         try{
    43.             $array = array();
    44.             $resBool =  $this->getOrgIdStmt->execute([':inn'=>700707077125]);
    45.          
    46.          
    47.         $res = $this->$getOrgIdStmt->fetchAll();
    48.          
    49.          
    50.         $values = array(
    51.             10,
    52.             $object->getUserFKid(),
    53.             $object->getStartDate(),
    54.             $object->getStartDate(),
    55.             $object->getContactinfo(),
    56.             $object->getProblemDescription()
    57.            );
    58.      
    59.         $this->insertStmt->execute($values);
    60.         $id = self::$PDO->lastInsertId();
    61.         $object->setId($id);
    62.         }
    63.         catch (PDOException $e)
    64.         {
    65.             print_r($e);
    66.         }
    67.     }
    68.  
    69.     protected function selectStmp() {
    70.         return $this->selectStmp;
    71.     }
    72.  
    73.     public function update(\DomainObject $object) {
    74.         $values = array(
    75.             $object->getInn(),
    76.             $object->getContactinfo(),
    77.             $object->getStartDate(),
    78.             $object->getproblemdescription(),
    79.             $object->getUserFKid());
    80.         $this->updateStmt->execute($values);
    81.     }
    82.  
    83. }
    но всеравно выдается ошибка
    PHP:
    1. Notice: Undefined variable: getOrgIdStmt in C:\xampp\htdocs\PhpProject1\datamappers\ProblemMapper.php on line 27
    2.  
    3. Fatal error: Cannot access empty property in C:\xampp\htdocs\PhpProject1\datamappers\ProblemMapper.php on line 27
     
  7. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. $this->$getOrgIdStmt = self::$PDO->prepare("SELECT organisation_id from organization where inn=:inn");
    Пока нашел только одну ошибку
     
  8. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    хмм нет тут все правильно, если поставить т.к. написали то ругается на эту строку
    PHP:
    1. Notice: Undefined variable: getOrgIdStmt in C:\xampp\htdocs\PhpProject1\datamappers\ProblemMapper.php on line 27
    2.  
    3. Fatal error: Cannot access empty property in C:\xampp\htdocs\PhpProject1\datamappers\ProblemMapper.php on line 27
     
  9. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ты хотя бы видел код который ты сюда скопировал?Это не я поставил, а ты в своем коде.Я всего лишь копирнул ТВОЙ код и указал место где ты ошибся. Убери $ у getOrgIdStmt и потом пришли результат,будем разбираться дальше
     
    timur2008 нравится это.
  10. timur2008

    timur2008 Новичок

    С нами с:
    14 окт 2015
    Сообщения:
    136
    Симпатии:
    2
    О точно заработало !!! Спустя два дня оно всетаки работает!!! Спасибо большое за помощь :)