Thiluxan:
私は私のPHPプログラムにMySQLを接続しようとしています。それは、データベース接続を持つすべてのエラーメッセージが表示されないように、データベースが正しく接続されていました。私は、テーブルからデータを取得しようとしているときには、出力は、任意の出力を表示しません。これは、空白の画面を残します。何のエラーメッセージも表示されません。それだけ「が正常に接続されているデータベース」を表示します。
<?php
define('user', 'root');
define('pwd', '');
$dsn = "mysql:host=localhost:3307;db_name=mydatabase";
try{
$db = new PDO($dsn,user,pwd);
echo "Database connected successfully";
$query = "SELECT * FROM student_detail";
$statementss = $db->prepare($query);
$statementss->execute();
$detail = $statementss->fetchAll();
foreach ($detail as $student) {
echo $student['Name']." ";
echo $student['Address']." ";
echo $student['Age']." ";
echo $student['Phone']." ";
echo "<br>";
}
$statementss->closeCursor();
}
catch(Exception $e){
echo $e->getMessage()."<br>";
}
?>
Drmn:
それはあなたが実際にはデータベース内の任意の値を持つかどうかは不明だが、私は今、PHPでのPDO拡張モジュールを使用してMySQLデータベースに正常に接続する方法を説明します。
あなたはDB接続を開くときに常に行う必要がある3つの事があります。
- エラー報告を有効にします。PDOでは、渡すことができ
$options
含む配列\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
エラー報告を有効にします。 - 正しい文字セットを設定します。最も一般的なものです
utf8mb4
。使用している場合はutf8
、私を強くできるだけ早くスイッチを作ることをお勧めします。 - PDOのインスタンスを作成します。
あなたがそれを行う必要があり、なぜあなたは知っている場合にのみ、例外をキャッチする必要があります。try-catchのすべてをラップしないでください。これは恐ろしい考えです。特に、これまでに出て、エラーメッセージをエコーするだけで例外をキャッチしません。これは無意味です。ただしラップすることができますnew PDO();
のtry-catch内の行をし、その後にカスタム例外をスローcatch
しますが、セキュリティに関する被害妄想している場合はブロック。
データベース名のキーと値のペアの名前があるdbname
の代わりにdb_name
。ポートを指定するときにも、それに専用のDSNで別のキーと値のペアがあります。それはあなたが間違ったポートまたはので、接続されたので、あなたの問題があったことかもしれないdb_name
認識されませんでした。
あなたの固定のコードは次のようになります。
<?php
define('user', 'root');
define('pwd', '');
$dsn = "mysql:host=localhost;port=3307;dbname=mydatabase;charset=utf8mb4";
$db = new \PDO($dsn, user, pwd, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
]);
echo "Database connected successfully";
$query = "SELECT * FROM student_detail";
$statementss = $db->prepare($query);
$statementss->execute();
$detail = $statementss->fetchAll();
foreach ($detail as $student) {
echo $student['Name']." ";
echo $student['Address']." ";
echo $student['Age']." ";
echo $student['Phone']." ";
echo "<br>";
}
無関係な問題:
- あなたはおそらく必要はありません
closeCursor()
。私はそれのアイデアはあなたの例にあったものを確認していません。 - それは常にあなたのHTMLからデータベース・ロジックを分離することをお勧めします。使用DB操作をカプセル化して、持っているクラスや関数
foreach
HTMLにループが。 - PHPの定数の命名規則については、それらを区別することが容易であるので、彼らは、大文字で書かれるべきであるということです。
- エミュレートされ、準備された文のスイッチをオフにすることをお勧めします。あなたは追加することができます
\PDO::ATTR_EMULATE_PREPARES => false
に$options
配列。