|
В этом разделе рассматриваются общие вопросы взаимодействия
PHP и БД. Да, PHP может получать доступ фактически к любой БД, известной на данный момент.
- 1. Я слышал, что можно получать доступ к Microsoft SQL Server из PHP. Как?
- 2. Можно ли получать доступ к БД Microsoft Access?
- 3. Я обновил до PHP 4, а как теперь mysql будет сообщать мне
"Warning!: MySQL: Unable to save result set in ..." ?
- 4. После установки совместной/shared поддержки MySQL, Apache
передаёт ядро в дамп, как только загружается libphp4.so. Можно ли это исправить?
- 5. Почему я получаю ошибку, которая выглядит примерно так: "Warning!: 0 is
not a MySQL result index in <file> on line <x>" или "Warning!: Supplied
argument is not a valid MySQL result resource in <file> on line <x>"?
1. Я слышал, что можно получать доступ к Microsoft
SQL Server из PHP. Как? На машинах с Windows вы можете просто использовать имеющуюся
поддержку ODBC и корректный ODBC-драйвер.
На машинах Unix вы можете использовать драйвер Sybase-CT для доступа к Microsoft SQL-серверам,
поскольку они протокольно совместимы (во всяком случае - большей частью). Sybase создал
свободную версию необходимых
библиотек для систем Linux. Для других ОС Unix вы должны запросить у Sybase корректные библиотеки.
См. также ответ на следующий вопрос.
2. Можно ли получать доступ к БД Microsoft Access?
Да. У вас уже имеются все необходимые утилиты, если вы работаете под Windows 9x/Me
или NT/2000, где можно использовать ODBC и Microsoft ODBC драйверы для БД Microsoft Access.
Если вы запускаете PHP в Unix-боксе и хотите сообщить MS Access в Windows-боксе,
вам понадобятся ODBC-драйверы для Unix. OpenLink Software
имеет ODBC-драйверы для Unix, которые делают эту работу. Имеется свободная
пилотная программа, где вы можете загрузить пробную копию, которая не имеет
срока годности, а цены начинаются от $675 для коммерческой поддерживаемой версии.
Другой вариант - использовать SQL-сервер, имеющий
Windows ODBC-драйверы, для хранения данных, к которым вы можете получить
затем доступ из Microsoft Access (используя ODBC) и из PHP (с помощью встроенных
драйверов), или можно использовать промежуточный формат, который понимается и Access,
и PHP, такой как flat-файлы или БД dBase. Tim Hayes из OpenLink software пишет об этом:
Использование другой БД в качестве посредника - плохая идея, если можно использовать
ODBC из PHP напрямую с вашей БД - т.е. через OpenLink-драйверы. Если вам
не нужно использовать файлы промежуточного формата, у OpenLink имеется
Virtuoso (машина виртуальных БД) для NT, Linux и других unix-платформ.
Посетите наш website, где можно бесплатно это загрузить.
|
Опцией, которая была успешно опробована, является использование MySQL и
его MyODBC-драйверов под Windows и синхронизация баз данных. Steve Lawrence пишет:
- Установите MySQL на вашей платформе в соответствии с инструкциями к MySQL,
которые находятся на www.mysql.com. Никакого специального
конфигурирования не требуется, за исключением случая,
когда вы устанавливаете БД и конфигурируете бюджет пользователя - тогда вы должны поместить % в поле host или имя хоста
Windows-копьютера, доступ к которому вы хотите выполнять из MySQL. Запомните имя вашего сервера, username и password.
- Загрузите драйвер MyODBC для Windows с сайта MySQL. Последний релиз это myodbc-2_50_19-win95.zip (для NT
также имеется, как и исходный код). Установите его на вашей Windows-машине. Вы
можете протестировать эту операцию с помощью прилагаемой утилиты.
- Создайте пользовательский или системный dsn в ODBC administrator,
размещённом в control panel. Введите dsn-имя, имя вашего хоста, user name, password,
port, etc для вашей БД MySQL, сконфигурированной на шаге 1.
- Произведите полную установку Access, это гарантирует, что у вас будут все необходимые
add-ins ... как минимум, вам необходима поддержка ODBC и менеджер связанных таблиц/linked table manager.
- Создайте новую access-БД. В окне таблицы щёлкните правой кнопкой мыши и
выберите Link Tables, либо в меню file выберите Get External Data, а затем - Link Tables.
Когда появится бокс поиска файлов, выберите тип файлов: ODBC.
Выберите System dsn и имя вашего dsn, созданного на шаге 3.
Выберите таблицу для привязки, нажмите OK. Теперь вы можете открыть
таблицу и добавлять/удалят/редактировать данные на вашем MySQL-сервере!
Вы можете также создавать запросы/queries, таблицы импорта/экспорта в MySQL,
создавать формы и отчёты etc.
Подсказки и замечания: Вы можете создавать в Аccess таблицы и экспортировать их в MySQL,
затем привязать их обратно. Это ускорит создание таблиц.
При создании таблиц в Аccess вы обязаны иметь определённый первичный ключ/primary
key, чтобы иметь право доступа для записи в таблицы Аccess. Убедитесь,
что вы создали primary key в MySQL, прежде чем выполнять привязку к Аccess.
Если вы изменяете таблицу в MySQL, вы должны повторно связать её с Access.
Перейдите в tools>add-ins>linked table manager,
найдите ваше ODBC DSN и выберите таблицу для повторного связывания. Вы
можете также перемещать здесь исходник вашего dsn,
просто щёлкните промпт always в переключателе new location, прежде чем нажать OK.
3. Я обновил до PHP 4, а как теперь mysql будет сообщать мне "Warning!: MySQL:
Unable to save result set in ..." ?
Вероятнее всего PHP 4 был скомпилирован с опцией '--with-mysql'
без специфицирования пути к MySQL. Это означает, что PHP использует свою
встроенную клиентскую библиотеку MySQL. Если в вашей системе работают приложения,
такие как PHP 3, конкурирующий Apache-модуль или auth-mysql, которые
используют другие версии MySQL-клиентов, тогда налицо конфликт между разными версиями этих клиентов.
Рекомпиляция PHP 4 и добавление пути к MySQL
'--with-mysql=/your/path/to/mysql'
обычно решает эту проблему.
4. После установки совместной/shared поддержки MySQL, Apache передаёт ядро в
дамп, как только загружается libphp4.so. Можно ли это исправить?
Это может произойти, если ваши MySQL libs подключены относительно pthreads.
Проверьте использование ldd. Если это так, скачайте MySQL tar и скомпилируйте из исходника,
либо рекомпилируйте из rpm и удалите в spec-файле переключатель, который
включает поточный клиентский код. Одно их этих должно помочь. Затем рекомпилируйте PHP с новыми MySQL libs.
5.
Почему я получаю ошибку, которая выглядит примерно так: "Warning!: 0 is not
a MySQL result index in <file> on line <x>" или "Warning!: Supplied argument is
not a valid MySQL result resource in <file> on line <x>"?
Вы пытаетесь использовать result-идентификатор 0.
0 указывает, что ваш запрос не выполнен по каким-то причинам. Необходимо
проверить наличие ошибок после отправки запроса/query и перед попыткой
использования возвращённого result identifier. Подходящий способ - сделать это кодом наподобие следующего:
$result = mysql_query("SELECT * FROM tables_priv");
if (!$result) {
echo mysql_error();
exit;
} |
или
$result = mysql_query("SELECT * FROM tables_priv")
or die("Bad query: ".mysql_error()); |
| |