phpMyAdminで作成した「customer-name」のようなハイフンが付いた名前のテーブルに、自作のPHPスクリプトからアクセスすると、うまくいかない場合があります。
原因は、基本的にはテーブル名にハイフンが使えないからです。
<?php $dsn = "mysql:host=localhost;dbname=test"; $conn = new PDO($dsn, "nisi", "qazxsw"); $sql = "SELECT * FROM customer-name"; $stmt = $conn->prepare($sql); $stmt->execute(); while ($row = $stmt->fetch()) { echo $row["name"]; } ?>
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-name’ at line
対策として、MySQLの場合は、テーブル名をバッククォート「`」で囲んで、使えない文字を含むテーブル名をエスケープします。
<?php $dsn = "mysql:host=localhost;dbname=test"; $conn = new PDO($dsn, "nisi", "qazxsw"); $sql = "SELECT * FROM `customer-name`"; $stmt = $conn->prepare($sql); $stmt->execute(); while ($row = $stmt->fetch()) { echo $row["name"]; } ?>
バッククォートについて詳しくは、以下の記事を参考にしてください。
phpMyAdminのSQLに付加される「’」に似た記号「`」は何?
phpMyAdminでは、ハイフン付きのテーブル名が自動でエスケープされるため、phpMyAdminでの作業(テーブル作成、データ表示、編集など)では問題なくハイフン付きのテーブルを扱うことができます。そのため、自作PHPスクリプトを実行するまで問題に気づかないかもしれません。
また、抜本的な対策としては、テーブル名にハイフンを使わず、代わりにアンダーバー「 _ 」を使う方法があります。