phpMyAdminで作成したハイフン付きのテーブル名でエラーになる

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スクリプトを実行するまで問題に気づかないかもしれません。

また、抜本的な対策としては、テーブル名にハイフンを使わず、代わりにアンダーバー「 _ 」を使う方法があります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする