|
|
 |
CapÃtulo 52. Problemas con bases de datos
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.
- 1.
He escuchado que es posible acceder a Microsoft SQL Server desde
PHP. ¿Cómo?
- 2. ¿Puedo acceder a bases de datos Microsoft
Access?
- 3.
He actualizado a PHP 4, y ahora mysql me dice persistentemente
"Warning: MySQL: Unable to save result set in
...". ¿Qué sucede?
- 4.
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?
- 5.
Después de instalar el soporte de MySQL compartido,
Apache produce un volcado de memoria tan pronto libphp4.so se
carga. ¿Puede solucionarse esto?
- 6.
¿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>"?
1.
He escuchado que es posible acceder a Microsoft SQL Server desde
PHP. ¿Cómo?
En máquinas Windows, puede simplemente usar el soporte
ODBC incluido y el controlador ODBC apropiado.
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 versión gratuita de las
bibliotecas necesarias para sistemas Linux. 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.
2. ¿Puedo acceder a bases de datos Microsoft
Access?
Si. Usted ya tiene todas las herramientas necesarias si
está corriendo enteramente bajo Windows 9x/Me, o NT/2000,
en donde es posible usar ODBC y los controladores ODBC para
bases de datos Microsoft Access.
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. OpenLink Software tiene
controladores ODBC basados en Unix que tienen esa capacidad.
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:
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 sitio web para una descarga
gratuita.
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:
Instale MySQL en su plataforma de acuerdo a las instrucciones
de MySQL. La última versión disponible se
encuentra en http://www.mysql.com/ 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 a la que desea
acceder desde MySQL. Anote su nombre de servidor, nombre de
usuario y contraseña.
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.
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.
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.
¡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.
Consejos y Trucos:
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.
Cuando se crean tablas en Access, es necesario tener una
llave primaria definida para tener acceso de escritura a la
tabla en access. Asegúrese de crear una llave primaria
en MySQL antes de enlazar en access.
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 presioner Aceptar.
3.
He actualizado a PHP 4, y ahora mysql me dice persistentemente
"Warning: MySQL: Unable to save result set in
...". ¿Qué sucede?
Lo más posible es que PHP 4 haya sido compilado con la
opción --with-mysql,
sin especificar la ruta a MySQL. Esto quiere decir que PHP
está usando su biblioteca cliente de MySQL
incorporada. Si su sistema está ejecutando aplicaciones,
tales como PHP 3 como un módulo concurrente de Apache, o
auth-mysql, que usan otras versiones de cliente MySQL, entonces
existe un conflicto entre las dos versiones diferentes de esos
clientes.
Recompilar PHP 4, y agregar la ruta a la bandera MySQL, '--with-mysql=/su/ruta/hacia/mysql'
por lo general resuelve este problema.
4.
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?
Si. Siempre habrá soporte MySQL en PHP en una forma u
otra. El único cambio en PHP 5 es que ya no distribuimos
la biblioteca cliente como tal. Algunas razones, sin orden
alguno en particular:
La mayorÃa de sistemas en la actualidad ya tienen la
biblioteca cliente instalada.
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
jugaba 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.
Su mantenimiento era un poco laxo y estaba quedándose
cada vez más atrás de la versiones lanzadas.
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.
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 libmyqlclient agregando la opción --with-mysql=/usr cuando se compila
PHP. Los usuarios de Windows pueden habilitar la
extensión php_mysql.dll al interior
de php.ini. Para más detalles, vea la Referencia de MySQL sobre las
instrucciones de instalación. También,
asegúrese de que libmysql.dll se
encuentre disponible en el PATH del sistema. Para más
detalles sobre el cómo, lea el FAQ sobre configurar el valor PATH en
sistemas Windows. Dado que
libmysql.dll (y varios otros archivos
relacionados) existen en la carpeta de PHP, usted querrá
agregar la carpeta de PHP al PATH del sistema.
5.
Después de instalar el soporte de MySQL compartido,
Apache produce un volcado de memoria tan pronto libphp4.so se
carga. ¿Puede solucionarse esto?
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 el rpm fuente 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
nueval bibliotecas MySQL.
6.
¿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>"?
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:
|
<?php
$resultado = mysql_query("SELECT * FROM tablas_priv");
if (!$resultado) {
echo mysql_error();
exit;
}
?>
|
o
|
<?php
$resultado = mysql_query("SELECT * FROM tablas_priv")
or die("Consulta fallida: " . mysql_error());
?>
|
add a note
User Contributed Notes
Problemas con bases de datos
cantelow at csd dot net
30-Aug-2006 10:48
On Tru64 5.1A, we had what looked like the mysql pthread problem, with php 5 shared lib compiling fine but crashing upon firing up apache. But, our problem turned out to be this: we were running 2 versions of mysql and attempting to use --with-mysql=/usr/local/newmysql5 to link to our running test mysql5 distribution. php was still linking against an old /usr/local/lib/mysql mysqlclient library, however (or setting up to use old /usr/local/lib/mysql shared mysqlclient.so, not sure which).
When we made sure that only /usr/local/newmysql5/lib/mysql/ mysqlclient library (which was a static one in our case) was available to our compiling user, our problem with php crashing on apache start went away. (We used tru64's handy setacl command to accomplish this.) We still have the mysql5 pthread-included compile.
Kaleabtesfaye at hotmail dot com
13-Apr-2006 12:56
If Some1 is intersted on PHP with MS Access
here is some code
<?php
$db = 'C:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb';
$conn = new COM('ADODB.Connection') $conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db") or exit('Cannot open with Jet.');
$sql = 'SELECT Table Field1,feild2...
FROM db
ORDER BY Field';
$rs = $conn->Execute($sql);
?>
Enjoy
Addis Ababa,
Ethiopia
jstoner at NOSPAM dot opsource dot net
01-Mar-2006 01:56
Building in a Redhat 4 64-bit environment:
This assumes you're using Redhat's RPMs (mysql, mysql-devel).
MySQL libraries get installed in /usr/lib64 but PHP only searches /usr/lib. This means your config will fail. You need to create a fake install of MySQL in another directory to get PHP to build correctly.
Create another directory, say /usr/local/mysql. Then cd into that directory and create 2 symbolic links pointing to the appropriate include directory and lib directory:
# mkdir /usr/local/mysql
# cd /usr/local/mysql
# ln -s /usr/include/mysql include
# ln -s /usr/lib64/mysql lib
Now, you should be able to configure PHP with "--with-mysql=/usr/local/mysql" and build properly.
James Coburn
01-Feb-2006 05:31
An easy way to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/
: simply install mysql-devel from mysql site.
plandis98 at yahoo dot com
18-Dec-2005 10:46
If one is using PHP on Windows to connection to MS SQL Server and does not want to pass credentials via the mssql_connect but instead use MS Connectionless NT Authentication, what is the proper syntax/usage?
I believe you want to turn on secure_connection in php.ini file:
; Use NT authentication when connecting to the server
mssql.secure_connection = On
djlopez at gmx dot de
08-Sep-2005 05:51
How to compile PHP5 when you have installed mysql, but
- you can't find the "mysql header files" or
- get this error: Cannot find MySQL header files under /usr/
If you want to use mysql 4.0 (*not* 4.1 or even higher!) just download & extract the latest mysql4.0 binary distribution to e.g.
/root/mysql40/
but don't start it (it even should not work, if you have a mysql server already running)
Then use --with-mysql=/root/mysql4 within your php5 configuration.
After compiling/installing (make, make install), you may delete the /root/mysql40/ directory, or keep it for later versions of php5.
20-Mar-2005 01:19
Just a quick note which may help Windows users setting up PHP/Apache/MySQL. I was receiving these two error messages on Apache startup: 1) "The procedure entry point mysql_thread_end could not be located in the dynamic link library LIBMYSQL.dll" and 2) "PHP Startup: Unable to load dynamic library '<my php installation dir>/ext/php_mysql.dll' - The specified procedure could not be found". After checking that libmysql.dll did exist in my root PHP install dir, and that this dir was in my path, I determined that the problem was an older version of libmysql.dll. My solution was to search all harddrives for this file (I found 6 copies of 5 different versions), and rename all of them except my PHP install dir copy. PHP, Apache and MySQL all function as expected after making this change.
knb at gfz-potsdam dot de
11-Oct-2004 02:53
This is a crucial piece of information for SYBASE users:
If you are using the free, but old, 11.x client libs from sybase,
then compile with option "--with-sybase-ct=$SYBASE"
substitute $SYBASE with the appropriate directory name.
option --with-sybase (without ct) can somehow be used to talk to old MS-SQL servers, but only with the 11.x client libs.
If you are using free, or have legally obtained, 12.x client libs from sybase, then compile with option "--with-sybase-ct=$SYBASE/$SYBASE_OCS"
substitute $SYBASE/$SYBASE_OCS with the appropriate directory name.
michal at tuxy dot org
26-Feb-2002 11:22
You can approch problem with mysql and pthread by recompiling/linking apache (1.3.2x) with pthread library instead of removing pthread from mysql. This solved my problem with apache dumping core with php (3.0.18 and php 4.1.1) and mysql.
You can use ldd to check if apache is compiled with pthreads.
Hope that helps.
| |
| | Citas célebres | Lo más curioso de mi madre es que durante treinta años alimentó a la familia sólo con sobras. La comida inicial nunca ha aparecido. Calvin Trillin Periodista y humorista estadounidense (n. 1935) | | Citas en tu mail | | ©Contenidos Gratis |
| Chiste de... Parecidos razonables | | De timbres y tintorerías | ¿En qué se parece un timbre a una tintorería?
En que el timbre hace tilín, y en la tintorería ti-lin-pian el traje. | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|