За последние 24 часа нас посетили 23000 программистов и 1229 роботов. Сейчас ищут 736 программистов ...

VK Callback и PHP PDO

Тема в разделе "PHP и базы данных", создана пользователем _The_Fire_, 26 авг 2019.

  1. _The_Fire_

    _The_Fire_ Активный пользователь

    С нами с:
    16 дек 2017
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток, возникла проблема, бьюсь несколько часов, не могу понять в чем причина.

    В общем, делаю бота для ВКонктакте на PHP, игрового, по этому и требуется БД.
    Для работы с БД использую PDO.

    Суть проблемы: при обращении ВК к моему обработчику, высвечивается вот такое сообщение:


    26.08.2019 15:56:24 Error: HTTP response code said error. Attempt 4/5

    Как я понял, ошибка где-то именно в работе с базой, потому что без нее все работает нормально, прошу помочь мне найти ошибку в коде.


    Main.php - обработчик на который ссылается ВК
    Код (Text):
    1.  
    2. <?php
    3.  
    4. ini_set('error_reporting', E_ALL);
    5. ini_set('display_errors', 1);
    6. ini_set('display_startup_errors', 1);
    7.  
    8.  
    9. $body = file_get_contents('php://input');
    10. $arr = json_decode($body, true);
    11.  
    12. if ($arr['type'] == 'confirmation') {
    13.     exit("Тут все работает нормально");
    14. }
    15.  
    16. if ($arr['type'] == 'message_new') {
    17.     include_once 'scripts/vk.class.php';
    18.     include_once 'scripts/db.class.php';
    19.  
    20.     $obj = $arr['object'];
    21.  
    22.     $db = new MyDB;
    23.     $vk = new vk('Тут тоже все вроде работает');
    24.  
    25.     $mess_id = $obj['id'];
    26.     $mess_date = $obj['date'];
    27.     $mess_peer_id = $obj['peer_id'];
    28.     $mess_from_id = $obj['from_id'];
    29.     $mess_text = $obj['text'];
    30.     $mess_random_id = $obj['random_id'];
    31.  
    32.     $mess_ref = $obj['ref'];
    33.     $mess_ref_source = $obj['ref_source'];
    34.     $mess_important = $obj['important'];
    35.     $mess_geo = $obj['geo'];
    36.     $mess_reply_message = $obj['reply_message'];
    37.  
    38.     $mess_action = $obj['action'];
    39.     $mess_action_type = $mess_action['type'];
    40.     // А вот тут скрипт прерывается
    41.     $user = $db->getUser($mess_from_id);
    42.     // Дальше не идет
    43.  
    44.     if(!$user)
    45.     {
    46.         file_put_contents("log2.txt", "Проверка пройдена последний раз - ".time());
    47.         //$user_vk = $vk->getUser($userid);
    48.         //$domain = $user_vk[0]['domain']//"DOMAIN NAXUY";
    49.         $db->regUser($mess_from_id);
    50.  
    51.     }
    52.  
    53.     $text_lower = mb_strtolower($mess_text, 'UTF-8');
    54.  
    55.     switch ($text_lower) {
    56.         case 'информация'
    57.         case 'помощь':
    58.             //$command->command_help($mess_from_id, $peer_id);
    59.             $vk->send($mess_peer_id, "саси", $mess_from_id);
    60.             break;
    61.        
    62.         default:
    63.            
    64.             break;
    65.     }
    66.     file_put_contents("log3.txt", "Проверка пройдена последний раз - ".time());
    67.  
    68. }
    69. exit("ok");
    db.class.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. class MyDB {
    5.  
    6.     private $db;
    7.     private $vk;
    8.  
    9.     public function __construct() {
    10.         include_once "vk.class.php";
    11.         try {
    12.           $this->db = new PDO("mysql:host=localhost;dbname=Тут имя бд", "Тут пользователь", "Мой пароль");
    13.           //$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    14.           $this->db->exec("set names utf8");
    15.           $this->vk = new vk('Тут работает вроде');
    16.         }
    17.         catch(PDOException $e) {
    18.             echo $e->getMessage();
    19.         }
    20.     }
    21.  
    22.     public function getUser($userid)
    23.     {
    24.         return $this->db->query("SELECT * FROM `accounts` WHERE `id` = '$userid'")->fetch(PDO::FETCH_ASSOC);  
    25.     }
    26.  
    27.     public function regUser($userid)
    28.     {
    29.         $user = $this->vk->getUser($userid);
    30.         $domain = $user[0]['domain'];
    31.         $nick = $user[0]['first_name'];
    32.         $sql = "INSERT INTO `accounts` (`id`, `domain`, `nickname`, `money`, `bank`, `bitcoins`, `bronzes`, `irons`, `diamonds`, `rubs`) VALUES ('$userid', '$domain', '$nick', '0', '0', '0', '0', '0', '0', '0');";
    33.         $this->db->query($sql);
    34.         return true;
    35.     }
    36.  
    37. }
    38. ?>
    Заранее спасибо..
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Лучше сохраняй куда-нибудь в логи, и потом посмотри, чего пишет. Вообще, сервера обычно настроены логи ошибок вести. Почитай, посмотри, что там происходит, когда контакт стучиться.
    Так вставлять переменные нельзя в запрос, надо подготавливать. Тем более ты PDO юзаешь