Я пытаюсь использовать $dbc->connect_error
чтобы проверить, не возникает ли какая-либо ошибка при попытке подключиться к моей базе данных. Я всегда получаю страницу с сообщением об ошибке:
Примечание. Неопределенное свойство: PDO :: $ connect_error в C: \ xampp \ htdocs \ add_products_processing.php в строке 7
Я использую Windows7 с XAMPP v3.2.2. Полный код показан ниже. Я уверен, что имя пользователя и пароль верны. Любой совет?
<?php $dsn = 'mysql:host=localhost;dbname=technoglance'; $username = 'root'; $password = 'password'; $dbc = new PDO($dsn, $username, $password); if ($dbc->connect_error) { die("Connection failed: " . $dbc->connect_error); } $main_class =filter_input(INPUT_POST, 'main_class'); $brand =filter_input(INPUT_POST, 'brand'); $model =filter_input(INPUT_POST, 'model'); $description =filter_input(INPUT_POST, 'description'); $quantity =filter_input(INPUT_POST, 'quantity'); $adding_date =filter_input(INPUT_POST, 'adding_date'); $sell_price =filter_input(INPUT_POST, 'sell_price'); $buying_price =filter_input(INPUT_POST, 'buying_price'); if(!empty($main_class)){ try{ $query = "INSERT INTO products (main_class, brand, model, description, quantity, adding_date, sell_price, buying_price ) VALUES ('$main_class', '$brand', '$model', '$description', '$quantity', now(),'$sell_price', '$buying_price' );"; // set the PDO error mode to exception $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbc->exec($query); echo "Thank you. The record has been sent successfully.<br><br>"; } catch(PDOException $e){ echo $query . "<br>" . $e->getMessage()."<br><br>"; } } else{ echo '<h1>Please use the contact form or don\'t leave an empty field!</h1>'; } ?>
на<?php $dsn = 'mysql:host=localhost;dbname=technoglance'; $username = 'root'; $password = 'password'; $dbc = new PDO($dsn, $username, $password); if ($dbc->connect_error) { die("Connection failed: " . $dbc->connect_error); } $main_class =filter_input(INPUT_POST, 'main_class'); $brand =filter_input(INPUT_POST, 'brand'); $model =filter_input(INPUT_POST, 'model'); $description =filter_input(INPUT_POST, 'description'); $quantity =filter_input(INPUT_POST, 'quantity'); $adding_date =filter_input(INPUT_POST, 'adding_date'); $sell_price =filter_input(INPUT_POST, 'sell_price'); $buying_price =filter_input(INPUT_POST, 'buying_price'); if(!empty($main_class)){ try{ $query = "INSERT INTO products (main_class, brand, model, description, quantity, adding_date, sell_price, buying_price ) VALUES ('$main_class', '$brand', '$model', '$description', '$quantity', now(),'$sell_price', '$buying_price' );"; // set the PDO error mode to exception $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbc->exec($query); echo "Thank you. The record has been sent successfully.<br><br>"; } catch(PDOException $e){ echo $query . "<br>" . $e->getMessage()."<br><br>"; } } else{ echo '<h1>Please use the contact form or don\'t leave an empty field!</h1>'; } ?>
Вот ваш код должен быть
<?php $dsn = 'mysql:host=localhost;dbname=technoglance;charset=utf8'; $username = 'root'; $password = 'password'; $dbc = new PDO($dsn, $username, $password); $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // filtering omitted if(!empty($main_class)){ $query = "INSERT INTO products (main_class, brand, model, description, quantity, adding_date, sell_price, buying_price ) VALUES (?,?,?,?,?,?,?,?);"; $data = [$main_class,$brand,$model,$description,$quantity,$adding_date,$sell_price,$buying_price]; $dbc->prepare($query)->execute($data); echo "Thank you. The record has been sent successfully.<br><br>";} else{ echo '<h1>Please use the contact form or don\'t leave an empty field!</h1>'; }
PDO сообщит об ошибках уже, без какого-либо дополнительного кода .
и вы должны использовать подготовленные заявления
Если мы посмотрим на руководство PDO и найдем класс PDO, в любом месте нет свойства connect_error
. Но если мы проверим руководство mysqli, мы увидим его там . Вы должны выбрать библиотеку базы данных и придерживаться ее, их нельзя смешивать.
Я всегда рекомендую настроить PDO, чтобы генерировать исключения, как вы уже это делали (хотя ошибки подключения, в частности, всегда будут выполняться вне исключения, независимо от ваших настроек) и не хотят их ловить, если вы не хотите делать что-то конкретное с ними.
Нет connect_error. Вы должны использовать исключение:
try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
Или, если вы не хотите исключение, вы можете попробовать errorCode и errorInfo