Вопросы по Базам данных

Этот раздел содержит общие вопросы о связи между PHP и базами данных. Да, сегодня практически любая база данных может быть доступна из PHP.

Я слышал, что можно получить доступ к Microsoft SQL серверу из PHP. Как?

На Unix вы можете использовать PDO_ODBC или Унифицированное ODBC API.

На Windows вы можете использовать PDO_SQLSRV или SQLSRV.

Также смотрите ответ на следующий вопрос.

Могу ли я получить доступ к базам данных Microsoft Access?

Да. Если все полностью выполняется под Windows 9x/Me или NT/2000, то у вас уже есть все необходимые средства, так как для баз данных Microsoft Access вы можете использовать ODBC и драйверы ODBC от Microsoft.

Если вы хотите связать PHP, выполняющийся на Unix, и MS Access на Windows, то вам будут нужны драйверы ODBC для Unix. Такие ODBC драйверы для Unix есть у » OpenLink Software.

Другая возможность - хранить данные на SQL сервере, который имеет ODBC драйверы для Windows, и затем обращаться к этой базе данных из Microsoft Access (используя ODBC) и из PHP (используя встроенные драйверы) или использовать промежуточный формат, понятный и для Access, и для PHP, например, простые файлы или базы данных dBase. По этому поводу Тим Хэйз (Tim Hayes) из OpenLink software пишет:

Использование промежуточной базы данных - не очень хорошая идея, когда есть возможность работать с базой данных напрямую из PHP через ODBC, например с драйверами от OpenLink. Если вам все-таки надо использовать промежуточный формат, OpenLink выпустил Virtuoso (механизм виртуальной базы данных) для NT, Linux и других платформ Unix. Пожалуйста, посетите наш » веб-сайт для бесплатной загрузки.

Другой проверенный вариант - использовать MySQL с её MyODBC драйверами на Windows и делать синхронизацию баз данных. Стив Лоренс (Steve Lawrence) пишет:

  • Установите MySQL согласно поставляемым с ней инструкциям. Последняя версия доступна с » http://www.mysql.com/. Особой конфигурации не требуется, за исключением того, что при настройке баз данных и создании пользователя, в поле хоста вы должны поместить % или имя Windows машины, на которую вы хотите получить доступ из MySQL. Запишите имя вашего сервера, имя пользователя и пароль.
  • Скачайте драйвер MyODBC для Windows с сайта MySQL. Установите его на вашей машине Windows. Вы можете проверить его работоспособность с помощью поставляемых с ним утилит.
  • Создайте пользователя или системный dsn в вашем администраторе ODBC, расположенном в контрольной панели. Создайте имя dsn, введите имя хоста, имя пользователя, пароль и т.д. для вашей базы данных MySQL, сконфигурированной на 1-ом шаге.
  • Установите полную версию Access, это даст вам уверенность, что вы получите все нужные расширения (add-ins). По крайней мере вам будут необходимы поддержка ODBC и администратор связанных таблиц.
  • И теперь самое интересное! Создайте новую базу данных Access. В окне таблицы щелкните правой кнопкой мышки и выберите Link Tables (Связать Таблицы), либо из файлового меню выберите Get External Data (Получить Внешние Данные) и затем Link Tables. В появившемся окне просмотра файлов выберите файлы типа ODBC. Выберите системный dsn и имя вашего dsn, созданного на 3-ем шаге. Выберите таблицу для связи, нажмите OK и вуаля! Теперь вы можете открыть таблицу и добавить/удалить/отредактировать данные на вашем MySQL сервере! Вы также можете строить запросы, импортировать/экспортировать таблицы в MySQL, создавать формы и отчеты, и т.д.

Полезные советы и трюки:

  • Вы можете создавать ваши таблицы в Access, экспортировать их в MySQL и затем привязать их назад. Это увеличивает скорость создания таблиц.
  • При создании таблиц в Access, вы должны определить первичный ключ, чтобы иметь доступ к таблице по записи. Убедитесь что вы создали первичный ключ в MySQL перед тем как привязать таблицу к Access.
  • Если вы изменяете таблицу в MySQL, то вы должны связать её с Access по-новой. Идите в tools>add-ins>linked table manager, следуйте к вашему ODBC DSN, и выберите оттуда таблицу для пересвязки. Там же вы можете изменить источник вашего dsn, для этого, перед тем как нажать OK, просто пометьте "always prompt for new location" (всегда запрашивать новое местонахождение).

Почему MySQL расширение (ext/mysql), которое я использовал более 10 лет, теперь не рекомендуется использовать? Что я должен использовать вместо него? Как мне обновить свои программы?

Есть три расширения для работы с MySQL, как описано в разделе Выбор MySQL API Старое API не должно использоваться, оно является устаревшим с версии PHP 5.5.0 и перемещено в PECL с версии PHP 7.0.0. Настоятельно рекомендуется писать весь новый код с использованием либо mysqli, либо PDO_MySQL.

Скрипты для перехода со старого API пока недоступны, но mysqli API содержит как процедурный так и объектный API, схожие со старым процедурным ext/mysql API.

Нельзя совмещать различные расширения. Поэтому, например передача mysqli соединения в PDO_MySQL или ext/mysql не будет работать.

Почему я получаю ошибки типа "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>?

Вы пытаетесь использовать идентификатор результата, который равен 0. 0 означает, что ваш запрос не удался по какой-либо причине. Вам необходимо сделать проверку на ошибки, после того как вы послали ваш запрос, и перед тем, как вы пытаетесь использовать возвращенный идентификатор результата. Правильный способ этой реализации выглядит примерно так:

<?php

$result 
mysql_query("SELECT * FROM tables_priv");
if (!
$result) {
    echo 
mysql_error();
    exit;
}
?>
или
<?php

$result 
mysql_query("SELECT * FROM tables_priv")
    or die(
"Плохой запрос: " mysql_error());
?>