2016-05-25 22 views
-1

$dbc->connect_errorを使用して、自分のデータベイに接続しようとしているときにエラーが発生していないかどうかを確認しようとしています。

お知らせ:未定義のプロパティ: CでPDO :: $のconnect_error:\ 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>'; 
} 

?> 
+4

あなたは 'PDO :: $ connect_error'が存在するはずだと思いますか?ドキュメントのどこにも記載されていません。 – deceze

+1

さらに、あなたのコードはSQLインジェクションを受けやすいです。 –

答えて

1

はあなたのコードが

<?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 will report it's errors already, without any extra code requiredどうあるべきかです。
あなたは準備文を使うべきです

0

connect_errorはありません。

try { 
    $dbh = new PDO($dsn, $user, $password); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

それとも、例外をしたくない場合は、errorCodeerrorInfo

+1

または、ちょっと*例外をキャッチしない*。より簡単なコード、優れたエラー報告、同じ結果 – deceze

2

我々はPDO manualを見ているとPDO class用に見れば何のconnect_errorプロパティはどこにもありませんを試すことができます:あなたは、例外を使用する必要があります。しかし、mysqli manualをチェックすると、right thereと表示されます。データベースライブラリを選択してそれに固執する必要があります。それらを混在させることはできません。

私はいつものようにPDOを設定しておくことをお勧めします(ただし、接続エラーは設定に関係なく常に例外になります)。ここで

関連する問題