1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/faq/databases.xml
Pedro Antonio Gil Rodríguez 1126451cee Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337595 c90b9560-bf6c-de11-be94-00142212c4b1
2015-08-23 18:49:19 +00:00

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&gt;Adiciones&gt;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 &lt;archivo&gt; on line &lt;x&gt;" o "Warning:
Supplied argument is not a valid MySQL result resource in
&lt;archivo&gt; on line &lt;x&gt;"?
</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
-->