Я нашел ответ сейчас (думаю, посмотрел на файлы один за другим помог) Проблема в том, что компилятор создает FileB.o, который имеет определение wat, а затем пытается скомпилировать FilB.o с FileA. cpp, в то время как FileA.h включает в себя файл FileB.h, теперь у него также будет определение wat.
Также нет сообщений об ошибках
blockquote>, потому что вы используете неправильный режим ошибок 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
-часть.
Основная проблема, я полагаю, заключается в выражении 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 )