php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #39657 The extended table-specification "database.table" creates errors
Submitted: 2006-11-28 06:26 UTC Modified: 2006-11-28 09:53 UTC
From: w dot kaiser at fortune dot de Assigned:
Status: Not a bug Package: MySQL related
PHP Version: 4.4.4 OS: XP Pro
Private report: No CVE-ID: None
 [2006-11-28 06:26 UTC] w dot kaiser at fortune dot de
Description:
------------
The extended table-specification "database.table" im SQL-queries creates errors, if the the "database"-name contains a "-" (dash);

The error is:

"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 '-olc.olc_configuration' at line 1"

A sample statement is "select count(*) from db1021924-olc.olc_configuration"

A connect to the database "db1021924-olc" is possible with PHP, but queries using the the extended table-specifications fail!

As we are using a "multi-db" approach in our application, and the ISP dictates this type of database-name syntax, this is a real show-stopper!

A database-name like "db1021924_olc" (using the underscore instead of the dash) works fine!



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-11-28 06:29 UTC] w dot kaiser at fortune dot de
Forgot to mention, that MySQL itself can cope with this database-name, so it must bee a PHP-problem!
 [2006-11-28 09:25 UTC] tony2001@php.net
The error message comes from MySQL client, which means it's not PHP problem.
 [2006-11-28 09:30 UTC] w dot kaiser at fortune dot de
No, it is not!

I first reported the bug to the MySQL-group, but they proofed to me, that MySQl handles the situation correctly!

This is what they sent to me:

===============================================

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 5.0.27-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database `db1021924-olc`;
Query OK, 1 row affected (0.00 sec)

mysql> use `db1021924-olc`;
Database changed
mysql> create table tb1 (id serial, col2 char(10));
Query OK, 0 rows affected (0.13 sec)

mysql> insert into tb1 (col2) values ("hello")
    -> ;
Query OK, 1 row affected (0.03 sec)

mysql> select * from `db1021924-olc`.tb1;
+----+-------+
| id | col2  |
+----+-------+
|  1 | hello |
+----+-------+
1 row in set (0.00 sec)
 [2006-11-28 09:39 UTC] derick@php.net
select * from `db1021924-olc`.olc_configuration;
vs.
select count(*) from db1021924-olc.olc_configuration;

Do you see the difference? Honestly, you're doing something wrong yourself. It is neither a PHP problem nor a MySQL problem.
 [2006-11-28 09:41 UTC] tony2001@php.net
1) select count(*) from db1021924-olc.olc_configuration
2) select count(*) from `db1021924-olc`.tb1

Don't you see the difference?
 [2006-11-28 09:53 UTC] w dot kaiser at fortune dot de
Thanx for your effort!

The "`" around the table name (`db1021924-olc`) does the trick!
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 11:01:30 2024 UTC