2017-07-13 25 views
1

これは本当に簡単な問題かもしれませんが、解決策が見つかりません。 私は単純なphp PDO無効なカタログ名:1046データベースが選択されていません

$query = $conn->query("SELECT * FROM dbName.users"); 

すべてがうまく動作しますが、DBNAMEせず、それはエラーが発生している場合:それはDBNAMEでのみ動作し、なぜ、ここで

SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected.

$Host  = "localhost"; 
$Name  = "test"; 
$User  = "test"; 
$Password = ""; 

try { 
    $conn = new PDO("mysql:host=$Host;dbName=$Name", $User, $Password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $query = $conn->query("SELECT * FROM users"); 
    while($r = $query->fetch()){ 
     echo $r['login']." ".$r['pass']."<br>"; 
    } 
} catch (PDOException $e) { 
    echo "Error: " . $e->getMessage(); 
} 

は誰もが知っていたコードですテーブル名の前に?どうすれば修正できますか? ありがとう!

+0

データベース名を指定しないと、データベースが選択されていないことがわかります。 – GrumpyCrouton

+0

接続文字列にデータベースを指定しているようです。これはあなたが使用している実際のコードですか? –

+0

ええ、私はデータベース名を含んでいないとき、私はデータベースが選択されていないと言います。私は "SELECT * FROM $ Name.users"を実行すると動作しますが、db名を何度も繰り返し書き込むことを避ける方法はありますか?それはテーブル名でのみ動作できますか? – nihai1234

答えて

1

問題を再現できました。あなたのDSN文字列に

$conn = new PDO("mysql:host=$Host;dbName=$Name", $User, $Password); 
//       use dbname instead 

どうやらdbName大文字と小文字が区別されます。それはdbnameでなければなりません。私がそれを変更した後、それは働いた。ただ、FYIこの時に起こる他の誰のための


は、私はもう少しそれをめちゃめちゃにし、それがDSNのパラメータ名のすべてのように見えますが、大文字と小文字を区別するようだ(と私は上にこれをテストしていましたWindowsでは、いくつかのものはありません)。それはのようにそれを行うだけでいいです。

+0

ええ、それは今、ありがとうございます。 – nihai1234

+0

ようこそ。 –

関連する問題