私はPDOに問題があり、彼がどこに来るのかまったくわかりません。 MySQLデータベースに質問できません。テストするために、次のコードを使用しました(以前に接続のパラメーターを非常に酸っぱく構成しました:
try {
$dbh= new PDO('mysql:Host=serverName;dbname=Mydatabase','user','password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e) {
die('Erreur : ' . $e->getMessage());
}
var_dump($dbh); // gives : object(PDO)#1 (0) { }
$res=$dbh->query('SELECT * FROM table');
MySQLで接続は正しく行われますが、クエリ後に次のエラーが発生します。
致命的なエラー:キャッチされない例外「PDOException」とメッセージ「SQLSTATE [3D000]:無効なカタログ名:1046データベースが選択されていません」/home/outout/public_html/file.php:16スタックトレース:#0/home/outout/public_html/file.php(16):PDO-> query( 'select * from t ...')#116行目の/home/outout/public_html/file.phpにスローされた#1 {main}。
コードはローカルマシンで動作しますが、オンライン(cPanel)にするとすぐに、このエラーが表示されます。 .htaccessでPDOを構成する必要がありますか?
どこに問題があるのか全くわかりません。誰かがアイデアを持っているだろうか?
Mysqlがハンドルを解決するのを手伝ってください。
の代わりに:
$res=$dbh->query('SELECT * FROM table');
試してください:
$res=$dbh->query('SELECT * FROM Mydatabase.table');
私は同じ問題に直面しました。問題の解決により、ホスト名とdbname変数の間のスペースが次のように削除されました。From:$ conn = new PDO( "mysql:Host = $ servername; dbname = $ dbname"、$ username、$ password);
宛先:$ conn = new PDO( "mysql:Host = $ servername; dbname = $ dbname"、$ username、$ password);
の代わりに:
$res=$dbh->query('SELECT * FROM table');
ただ行う:
$res=$dbh->query('SELECT * FROM dbname.tablename');
あなたは行ってもいいでしょう。
$dbh= new PDO('mysql:Host=serverName;dbname=Mydatabase','user','password');
これは間違っています。 Host = serverNameを持つことはできません。代わりに、Host = $ serverNameのようなものが必要であり、次に$ serverName = "servername.domanin"; dbname = Mydatabaseと同じように、これらの変数を$ Mydatabase = "mydatabase"にする必要があります。次のようになります。
$servername = "servername";
$username = "username";
$password = "password";
$dbname = "dbname";
try {
$conn = new PDO("mysql:Host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connection ok!";
} catch (PDOException $e) {
echo "Err: " . $e->getMessage();
}
$conn = null;
これは機能します。詳細: http://www.w3schools.com/php/php_mysql_connect.asp
同じエラーが発生しました。これは、文字列でdbname = $ dbnameを使用する代わりに、タイプミスである$ dbname = $ dbnameを使用したためです。文字列を正しく書く必要があります!
'mysql'(mysql:Host)で 'Host'文字列について言及していなくても、同じ問題に直面しました。次のコードで問題を解決しました。
class Database{
protected static $pdo;
public function __construct(){}
public function connect(){
$dsn="mysql:Host=localhost;dbname=dbname";
try{
self::$pdo = new PDO($dsn,"root","");
self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connected';
return self::$pdo;
}catch(PDOException $ex){
echo $ex->getMessage();
}
return false;
}
public function getConnection(){
return self::$pdo;
}
}
私をつまずかせたのは、MySQLワークベンチのツリーからデータベース名をコピーしてsettings.phpファイルに貼り付けたことです。文字列の最初と最後のアポストロフィは偽のアポストロフィであることがわかります。私はそれらを削除し、実際のアポストロフィを入れて、すべてがすぐに起動しました。これを理解するのに数時間かかりました。これが他の誰かに役立つことを願っています。