mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 00:12:06 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337595 c90b9560-bf6c-de11-be94-00142212c4b1
347 lines
14 KiB
XML
347 lines
14 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 66e166573396fdcc8f37885e092ed24a0982ac2f Maintainer: x1v4nx Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<chapter xml:id="faq.databases" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Problemas con bases de datos</title>
|
|
<titleabbrev>Problemas con bases de datos</titleabbrev>
|
|
|
|
<para>
|
|
Esta sección contiene preguntas comunes sobre la relación entre PHP y
|
|
bases de datos. Sí, PHP puede acceder a prácticamente cualquier base de
|
|
datos disponible hoy en día.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry xml:id="faq.databases.mssql">
|
|
<question>
|
|
<para>
|
|
He escuchado que es posible acceder a Microsoft SQL Server desde PHP.
|
|
¿Cómo?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
En máquinas Windows, puede simplemente usar el soporte ODBC incluido y
|
|
el controlador ODBC apropiado.
|
|
</para>
|
|
<para>
|
|
En máquinas Unix, es posible usar el controlador Sybase-CT para
|
|
acceder a Servidores Microsoft SQL ya que son compatibles (en su
|
|
mayoría) al nivel del protocolo. Sybase ha creado una <link
|
|
xlink:href="&url.sybase.ctlib;">versión gratuita de las bibliotecas
|
|
necesarias para sistemas Linux</link>. Para otros sistemas operativos
|
|
Unix, necesita ponerse en contacto con Sybase para obtener las
|
|
bibliotecas correctas. Consulte también la respuesta a la siguiente
|
|
pregunta.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.databases.access">
|
|
<question>
|
|
<para>¿Puedo acceder a bases de datos Microsoft Access?</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Si. Usted ya dispone de todas las herramientas necesarias si está corriendo
|
|
enteramente bajo Windows 9x/Me, o NT/2000, en donde es posible utilizar
|
|
ODBC y los controladores ODBC para bases de datos Microsoft Access.
|
|
</para>
|
|
<para>
|
|
Si está corriendo PHP en una máquina Unix y desea comunicarse con MS
|
|
Access en una máquina Windows, necesitará controladores ODBC para
|
|
Unix. <link xlink:href="&url.openlink;">OpenLink Software</link>
|
|
tiene controladores ODBC basados en Unix que tienen esa capacidad.
|
|
</para>
|
|
<para>
|
|
Otra alternativa consiste en usar un servidor SQL que tenga
|
|
controladores ODBC Windows y usarlo para almacenar los datos, a los
|
|
cuales puede acceder desde Microsoft Access (usando ODBC) y PHP
|
|
(usando los controladores incorporados), o usar un formato de archivo
|
|
intermedio que Access y PHP entiendan, como archivos planos o bases de
|
|
datos dBase. Sobre este punto, Tim Hayes de OpenLink Software escribe:
|
|
<blockquote>
|
|
<para>
|
|
Usar otra base de datos como intermediario no es una buena idea,
|
|
cuando es posible usar ODBC desde PHP directamente a su base de
|
|
datos - es decir, con los controladores de OpenLink. Si realmente
|
|
necesita usar un formato de archivo intermedio, OpenLink ha lanzado
|
|
ahora Virtuoso (un motor de bases de datos virtual) para NT, Linux y
|
|
otras plataformas Unix. Por favor visite nuestro <link
|
|
xlink:href="&url.openlink;">sitio web</link> para una descarga
|
|
gratuita.
|
|
</para>
|
|
</blockquote>
|
|
</para>
|
|
<para>
|
|
Una opción que ha sido probada con éxito es usar MySQL y sus
|
|
controladores MyODBC en Windows y sincronizar las bases de datos.
|
|
Steve Lawrence escribe:
|
|
</para>
|
|
<para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Instale MySQL en su plataforma de acuerdo a las instrucciones de
|
|
MySQL. La última versión disponible se encuentra en <link
|
|
xlink:href="&url.mysql;">&url.mysql;</link>. No se requiere ninguna
|
|
configuración especial, exceptuando al momento de configurar una
|
|
base de datos, y al configurar la cuenta de usuario, debe poner %
|
|
en el campo de host, o el nombre del host del equipo Windows desde el
|
|
que desea acceder a MySQL. Anote su nombre de servidor, nombre
|
|
de usuario y contraseña.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Descargue el controlador MyODBC para Windows desde el sitio de
|
|
MySQL. Instálelo en su equipo Windows. Es posible probar su
|
|
operación con las utilidades incluidas con este programa.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Cree un usuario o dsn de sistema en su administrador de ODBC,
|
|
ubicado en el panel de control. Cree un nombre dsn, ingrese su
|
|
nombre de host, nombre de usuario, contraseña, puerto, etc. para su
|
|
base de datos MySQL configurada en el paso 1.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Instale Access usando la instalación completa, esto asegura que
|
|
tenga las elementos adicionales apropiados... por lo menos
|
|
requerirá el soporte ODBC y el gestor de tablas enlazadas.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
¡Ahora la parte divertida! Cree una nueva base de datos Access. En
|
|
la ventana de tabla use el clic derecho y seleccione Enlazar
|
|
Tablas, o bajo la opción del menú de archivo, seleccione Obtener
|
|
Datos Externos y luego Enlazar Tablas. Cuando el cuadro de
|
|
navegación de archivos aparezca, seleccione archivos de tipo: ODBC.
|
|
Seleccione dsn de Sistema y el nombre de su dsn creado en el paso
|
|
3. Seleccione la tabla a enlazar, presione Aceptar, y ¡listo!
|
|
¡Ahora es posible abrir la tabla y agregar/eliminar/editar datos en
|
|
su servidor MySQL! También es posible construir consultas,
|
|
importar/exportar tablas a MySQL, construir formularios y reportes,
|
|
etc.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
Consejos y Trucos:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Es posible construir sus tablas en Access y exportarlas a MySQL, y
|
|
luego enlazarlas de vuelta. Esto facilita la rápida creación de
|
|
tablas.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Cuando se crean tablas en Access, es necesario tener una clave
|
|
primaria definida para tener acceso de escritura a la tabla en
|
|
Access. Asegúrese de crear una clave primaria en MySQL antes de
|
|
enlazar en Access.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Si modifica una tabla en MySQL, es necesario re-enlazarla en
|
|
Access. Diríjase a Herramientas>Adiciones>Gestor de Tablas
|
|
Enlazadas, vaya a su DSN ODBC, y seleccione la tabla a re-enlazar
|
|
desde allí. También es posible transladar su fuente dsn allí,
|
|
simplemente active el cuadro de verificación "siempre preguntar por
|
|
una ubicación nueva" antes de presionar Aceptar.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.databases.mysql.deprecated">
|
|
<question>
|
|
<para>
|
|
¿Por qué el uso de la extensión MySQL (ext/mysql), que he utilizado durante más de
|
|
10 años, está desaconsejado? ¿Está obsoleta? ¿Qué utilizo en su lugar?
|
|
¿Cómo puedo migrar?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Existen tres extensiones de MySQL, como está descrito en la sección
|
|
<link linkend="mysqlinfo.api.choosing">Elegir una API de MySQL</link>. No se debe
|
|
usar la API antigua, está obsoletea a partir de PHP 5.5.0 y ha sido movida a PECL a paritr de PHP 7.0.0.
|
|
Se recomienda encarecidamente
|
|
escribir todo el código nuevo con <link linkend="book.mysqli">mysqli</link> o
|
|
<link linkend="ref.pdo-mysql">PDO_MySQL</link>.
|
|
</para>
|
|
<para>
|
|
La migración de los scripts no está disponible por el momento, aunque la API mysqli API contiene tanto
|
|
una API procedimental como una API POO, siendo la versión procedimental similar a ext/mysql.
|
|
</para>
|
|
<para>
|
|
No es posible mezclar extensiones. Así, por ejemplo, pasar una conexión mysqli a
|
|
PDO_MySQL o ext/mysql no funcionará.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.databases.mysql.php5">
|
|
<question>
|
|
<para>
|
|
PHP 5 ya no incluye bibliotecas cliente de MySQL, ¿qué representa esto
|
|
para mí? ¿Aun puedo usar MySQL con PHP? Intento usar MySQL y obtengo
|
|
errores de tipo "function undefined", ¿qué pasa?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Si. Siempre habrá soporte MySQL en PHP de una u otra forma. El único
|
|
cambio en PHP 5 es que ya no distribuimos la biblioteca cliente como
|
|
tal. Algunas razones, sin orden alguno en particular:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
La mayoría de sistemas en la actualidad ya tienen la biblioteca
|
|
cliente instalada.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Dado lo anterior, tener versiones múltiples de la biblioteca puede
|
|
causar problemas. Por ejemplo, si enlaza mod_auth_mysql contra una
|
|
versión y PHP contra otra, y luego habilita ambos en Apache,
|
|
obtendrá un bonito y gordo fallo. Asimismo, la biblioteca
|
|
distribuida no siempre interactuaba bien con la versión del servidor
|
|
instalada. El síntoma más obvio de esta situación es el desacuerdo
|
|
sobre el lugar en donde encontrar el archivo de sockets de dominio
|
|
Unix mysql.socket.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Su mantenimiento era un poco laxo y estaba quedándose cada vez más
|
|
atrás de la versiones lanzadas.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Las versiones futuras de la biblioteca están bajo la GPL y por lo
|
|
tanto no contamos con una ruta de actualización, ya que no podemos
|
|
distribuir una biblioteca GPL en un proyecto con licencia tipo
|
|
BSD/Apache. Un corte limpio en PHP 5 parecía la mejor opción.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<para>
|
|
Esto en realidad no afectará a muchos. Los usuarios de Unix, por lo
|
|
menos aquellos que saben lo que están haciendo, tienden a compilar
|
|
siempre PHP contra sus bibliotecas de sistema libmysqlclient agregando
|
|
la opción <option role="configure">--with-mysql=/usr</option> cuando
|
|
se compila PHP. Los usuarios de Windows pueden habilitar la extensión
|
|
<filename>php_mysql.dll</filename> dentro de &php.ini;. Para más
|
|
detalles, vea la <link linkend="ref.mysql">Referencia de MySQL</link>
|
|
sobre las instrucciones de instalación. También, asegúrese de que
|
|
<filename>libmysql.dll</filename> se encuentre disponible en el <envar>PATH</envar>
|
|
del sistema. Para más detalles sobre el cómo, lea el FAQ sobre <link
|
|
linkend="faq.installation.addtopath">configurar el valor PATH en
|
|
sistemas Windows</link>. Dado que <filename>libmysql.dll</filename> (y
|
|
varios otros archivos de PHP relacionados) existen en la carpeta de PHP,
|
|
usted querrá agregar la carpeta de PHP al <envar>PATH</envar> del sistema.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.databases.shared-mysql">
|
|
<question>
|
|
<para>
|
|
Después de instalar el soporte de MySQL compartido, Apache produce un
|
|
volcado de memoria tan pronto libphp4.so se carga. ¿Puede solucionarse
|
|
esto?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Si sus bibliotecas de MySQL están enlazadas contra pthreads ocurrirá
|
|
esto. Verifique usando ldd. Si lo están, obtenga las fuentes de MySQL
|
|
y compile desde allí, o re-compile desde la fuente rpm y elimine el
|
|
conmutador en el archivo spec que habilita el código de cliente con
|
|
hilos. Cualquiera de estas sugerencias solucionará el problema. Luego
|
|
recompile PHP con las nuevas bibliotecas MySQL.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.databases.mysqlresource">
|
|
<question>
|
|
<para>
|
|
¿Porqué recibo un error que luce algo así: "Warning: 0 is not a MySQL
|
|
result index in <archivo> on line <x>" o "Warning:
|
|
Supplied argument is not a valid MySQL result resource in
|
|
<archivo> on line <x>"?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Está intentando usar un identificador de resultado que es 0. El 0
|
|
indica que su consulta falló por alguna razón. Necesita verificar
|
|
errores después de enviar una consulta y antes de que intente usar el
|
|
identificador de resultado devuelto. La manera apropiada de hacerlo es
|
|
con un código similar al siguiente:
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
$resultado = mysql_query("SELECT * FROM tablas_priv");
|
|
if (!$resultado) {
|
|
echo mysql_error();
|
|
exit;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
o
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
$resultado = mysql_query("SELECT * FROM tablas_priv")
|
|
or die("Consulta fallida: " . mysql_error());
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
</qandaset>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|