У меня довольно странная проблема с php и mysql. Я делаю следующее в моем PHP-скрипте:
$query1 = "SELECT * FROM ".$src;
$ans1 = mysql_query($query1,$vitoquenId);
echo "<p>Query: \"".$query1."\"<br/>Error: \"".mysql_error()."\"<br/>Total rows extracted: ".mysql_num_rows($ans1)."</p>";
при этом это вывод:
Query: "SELECT * FROM Almacen"
Error: ""
Total rows extracted: 0
Дело в том, что я не должен получать 0 строк, и странно то, что об ошибках не сообщается. Я предоставил все разрешения для своего пользователя и даже попытался подключиться к базе данных от имени пользователя root, но получил то же поведение.
При выполнении запроса непосредственно в командной строке mysql я получаю следующее:
mysql> SELECT * FROM Almacen;
+----+-------------+------------+--------+
| id | nombre | tipo | status |
+----+-------------+------------+--------+
| 1 | Tienda | Principal | Activo |
| 2 | Dep�sito | Secundario | Activo |
| 3 | Chaguaramos | Secundario | Activo |
+----+-------------+------------+--------+
3 rows in set (0.00 sec)
Я попытался использовать сервер xampp, а также сервер, настроенный самостоятельно, и получил то же поведение.
Я проверил каждый журнал, о котором думал, настроил mysql для записи каждого запроса, и ничего необычного не происходит.
журнал mysql показывает следующее:
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
Журнал apache ничего не показывает, ни журнал для конкретного сайта. Пожалуйста, любая подсказка, пытающаяся расшифровать это, будет очень цениться !!! Спасибо!!! =)
EDIT:
Я нашел проблему. Это как-то связано с ответом aefxx .
Программа, которую я пишу, является инструментом миграции. Он извлекает информацию из одной базы данных, обрабатывает ее и вставляет в другую базу данных. Для этого мне нужно подключиться к двум базам данных. Я делаю соединение через два класса, используя шаблон синглтона, как предложено в документации php . Вы можете увидеть файл подключения в github repo .
чтобы установить соединение с БД, я вызываю этот класс так:
$vitoquen = Vitoquen::singleton();
$newVitoquen = NewVitoquen::singleton();
$vitoquenId = $vitoquen->getId();
$newVitoquenId = $newVitoquen->getId();
Происходит то, что по какой-то причине он не создает двух отдельных соединений, а вместо этого создает только одно соединение и использует второй db, новый, который является пустым. Я понял, когда увидел журнал mysql:
110802 16:21:49 101 Connect victor@localhost on
101 Init DB saw
101 Init DB sawprueba
101 Query SELECT * FROM Almacen
101 Quit
дважды показывает 101 Init DB ; один для saw
и другой для sawprueba
. Теперь я не понимаю, почему он не создает два отдельных соединения ... какие-либо предложения ???
большое спасибо за вашу помощь !!! =) * * Тысячу сорок-пять
EDIT:
Я пока не могу ответить самостоятельно, но это решение моей проблемы. В любом случае, спасибо тем, кто потратил время на чтение (и некоторые ответил) этого!
Как видно из документации функции php mysql_connect () , он получает необязательный параметр с именем new_link
, который по умолчанию равен false
.
new_link
Если второй вызов сделан для mysql_connect () с тем же
аргументы, новая ссылка не будет установлена, но вместо этого ссылка
Идентификатор уже открытой ссылки будет возвращен. Новая ссылка
параметр изменяет это поведение и делает mysql_connect () всегда открытым
новая ссылка, даже если mysql_connect () был вызван ранее с тем же
параметры. В безопасном режиме SQL этот параметр игнорируется.
Итак, мне просто нужно было добавить true как дополнительный последний параметр к вызову mysql_connect () в обоих классах соединения. решено =)