PHP PDO-код подключается к базе данных, но не выполняет запросы и не возвращает ошибки [закрыто]

Я нашел ответ сейчас (думаю, посмотрел на файлы один за другим помог) Проблема в том, что компилятор создает FileB.o, который имеет определение wat, а затем пытается скомпилировать FilB.o с FileA. cpp, в то время как FileA.h включает в себя файл FileB.h, теперь у него также будет определение wat.

-2
задан RiggsFolly 27 February 2019 в 11:45
поделиться

2 ответа

Также нет сообщений об ошибках

, потому что вы используете неправильный режим ошибок PDO, вы используете режим по умолчанию, который, iirc, называется PDO::ERRMODE_SILENT

это правильный способ создания объекта PDO:

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password', 
array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

и когда вы создали свой, вы забыли PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION -часть.

0
ответ дан hanshenrik 27 February 2019 в 11:45
поделиться

Основная проблема, я полагаю, заключается в выражении sql - в нем отсутствует запятая между u_add и u_pass

$reg = $db->prepare('INSERT INTO bakery_users (u_name, u_mail, u_add, u_pass) VALUES (:u_name, :u_mail, :u_add, :u_pass)');

Если вы проверяете возвращаемое значение prepare, вы можете форк логика зависит от его успеха / неудачи

        if( $reg ){
            $reg->bindParam(':u_mail', $username,PDO::PARAM_STR);
            $reg->bindParam(':u_mail', $email,PDO::PARAM_STR);
            $reg->bindParam(':u_add', $address,PDO::PARAM_STR);
            $reg->bindParam(':u_pass', $pass,PDO::PARAM_STR);
            $reg->execute();
            return true;            
        } else {
            exit('error');
        }

У вас также есть неправильно названный параметр в первом операторе связывания

$reg->bindParam(':u_mail', $username,PDO::PARAM_STR);

должно быть

$reg->bindParam(':u_name', $username,PDO::PARAM_STR);

Вы Я могу использовать блок try/catch, чтобы попытаться идентифицировать проблемы конструктивным образом, как этот

public function reg_user($username, $email, $address, $pwd){
    try{
        $pass = password_hash($pwd, PASSWORD_BCRYPT);
        $check = $this->db->prepare('SELECT * FROM `bakery_users` WHERE `u_mail` = :u_mail');
        if( !$check )throw new Exception('Failed to prepare SELECT query');

        $check->bindParam(':u_mail', $email, PDO::PARAM_STR);
        $check->execute();
        $count = $check->rowCount();

        if( $count < 0 ){

            $reg = $db->prepare('INSERT INTO `bakery_users` (`u_name`, `u_mail`, `u_add`, `u_pass` ) VALUES ( :u_name, :u_mail, :u_add, :u_pass )');

            if( $reg ){
                $reg->bindParam(':u_name', $username,PDO::PARAM_STR);
                $reg->bindParam(':u_mail', $email,PDO::PARAM_STR);
                $reg->bindParam(':u_add', $address,PDO::PARAM_STR);
                $reg->bindParam(':u_pass', $pass,PDO::PARAM_STR);
                $reg->execute();

                return true;            
            } else {
                throw new Exception('Failed to prepare INSERT query')
            }
        } else{
           $db = null;
           return false;
        }
    }catch( Exception $e ){
        exit( sprintf('An error "%s" on line %d of "%s"',$e->getMessage(),$e->getLine(),__METHOD__ ) );
    }
}

Я должен был заметить раньше, чем использовать if( $count < 0 ) ~, что должно быть if( $count==0 )

[115 ]
0
ответ дан RamRaider 27 February 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: