Symfony2(beta4)を初めて使用し、Doctrine=であり、コマンドラインからDBスキーマを作成しようとすると問題が発生します。
エラーは次のとおりです。
$ php app/console doctrine:schema:create
Creating database schema...
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
[ErrorException]
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)
in /Applications/MAMP/htdocs/sf-test-2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36
Mysqlデータベース設定がconfig/parameters.iniファイルに正しく挿入されます。
そして、これはconfig.ymlのDoctrine設定です
# Doctrine Configuration
doctrine:
dbal:
driver: %database_driver%
Host: %database_Host%
dbname: %database_name%
user: %database_user%
password: %database_password%
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
そしてエンティティ(私はそれをテストするために1つだけ作成しました)
<?php
// src/Acme/NewsBundle/Entity/Article.php
namespace Acme\NewsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="articles")
*/
class Article
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length="255")
*/
protected $title;
/**
* @ORM\Column(type="text")
*/
protected $body;
/**
* @ORM\Column(type="string", length="255")
*/
protected $author;
/**
* @ORM\Column(type="date")
*/
protected $date;
}
?>
この小さなチュートリアルに従って修正しました: http://andreys.info/blog/2007-11-07/configuring-terminal-to-work-with-mamp-mysql-on-leopard
[編集]:正しいphp.iniを変更し、すべて正常に動作するようになりました。
今、私は次のエラーを受け取ります:
[Exception]
DateTime::__construct(): It is not safe to rely on the system's timezone settings.
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead
Php.iniのdate.timezone構成は次のとおりです。
date.timezone = "Europe/Paris"
私は自分でそれを理解しようとしますが、あなたの誰かがそれを修正する方法を知っていれば、これについてコメントすることをheしないでください。ありがとう!
遅すぎますが、それが誰かの助けになることを願っています。
ちょうど今日、私は同様の状況に陥ります(ただし、他のコンテキストでは、dbからエンティティを作成しようとしました)。
Parameters.iniファイルのde database_Hostを「localhost」から「127.0.0.1」に変更するだけで解決しました。
MysqlインスタンスはTCP経由でのみ実行され、ソケットではなく、これはdatabase_Host = "localhost"を使用すると失敗するためです。
この行を追加してみてください
unix_socket: /tmp/mysql.sock
config.ymlファイルに> doctrine> dbalをパスワード行の直後に置きます。
App/config/database.phpで「Host」=>「localhost」を「Host」=>「127.0.0.1」に変更しましたが、すべて正常に動作しています
私にとっての問題はmysql.default_socket
PHP.INIの設定は、MySQLが実際にそのファイルを置く場所とは異なる場所にデフォルト設定されます。
設定ファイルを編集する代わりに、実際のmysql.sockに接続するPHPが探している場所にエイリアスを作成しました。
次の2つのコマンドを実行するだけです(再起動は不要です)。
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Laravel。env add DB_SOCKETへのパスでmysql.sock
DB_CONNECTION=mysql
DB_Host=localhost
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=mypassword
DB_SOCKET=/Users/username/Library/Containers/MAMP/mysql/tmp/mysql.sock
またはPDOでunix_socketを追加します
PDO('mysql:Host=localhost;port=3306;unix_socket=/Users/username/Library/Containers/MAMP/mysql/tmp/mysql.sock', root, mypassword);
Mysqlも実行されているかどうかを確認する価値があります。
MysqlとApacheを再起動するだけでうまくいくと思います。
Mysql.lockのロケーションパスのソリューションがいくつかある場合があります。しかし、最良の解決策は、php phpinfo()
関数を使用してmysqlのロケーションパスを確認することだけだと思います。
注:phpinfo()
に慣れていない場合は、ファイルを作成して任意の名前を付け、このファイルの内容を次のように含めます。
<?php
phpinfo();
?>
このファイルを実行し、mysql.lockファイルのパスを取得します。役立つと思います。
遅すぎますが、それが誰かにも役立つことを願っています。
Vagrantを使用しています
localhost
を127.0.0.1
に変更し、ポートを3333
に変更するだけです
完璧に働きました。
デプロイメントのsymfony 3.2.9で同じ問題「SQLSTATE [HY000] [2002] No such file or directory」がありました
Parameters.ymlファイルでdatabase_Host値を「localhost」からサーバーIPに変更することで修正しました
しかし、SSHでコマンドラインを実行しようとすると、次のエラーメッセージが表示されました。
[Doctrine\DBAL\Exception\ConnectionException]ドライバーで例外が発生しました:SQLSTATE [HY000] [2002] Connection refused
最後に、これらの2行をconfig.ymlファイルのDoctrine設定セクションに追加します:
unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'
すべての私の最終doctrine=設定はこのようなものです:
doctrine:
dbal:
driver: pdo_mysql
Host: '%database_Host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'
charset: UTF8
うまくいけば、これが役立つ
Mysqlを再起動するとうまくいきました:
Sudo /etc/init.d/mysql restart