Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Dudas consultas mysql con php

Estas en el tema de Dudas consultas mysql con php en el foro de PHP en Foros del Web. Buenas, Tengo una duda. De siempre las consultas contra mysql las he realizado con este código: $req=mysql_query("SELECT id FROM clientes WHERE email ='".$email."'"); if (! ...
  #1 (permalink)  
Antiguo 19/01/2013, 14:07
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Dudas consultas mysql con php

Buenas,

Tengo una duda. De siempre las consultas contra mysql las he realizado con este código:

$req=mysql_query("SELECT id FROM clientes WHERE email ='".$email."'");

if (! $req) {
echo"error 1";
}

$datos2=mysql_fetch_array($req);


Pero estoy viendo los siguientes códigos que incluyen $link en la estructura...


$id = mysqli_query($link, "SELECT id FROM users WHERE username = '$username'");


/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
if ($result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT)) {



¿Alguien me puede explicar la diferencia? ¿Dónde puedo encontrar más información?

Graciasss
  #2 (permalink)  
Antiguo 19/01/2013, 15:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Dudas consultas mysql con php

En el manual PHP puedes encontrar información de cada uno de los parámetros:

Cita:
Link: La conexión MySQL. Si el identificador de enlace no se especifica, el último enlace abierto por mysql_connect() es asumido. Si no se encuentra dicho enlace, la función intentará establecer un nuevo enlace como si mysql_connect() fuese invocado sin parámetros. Si no se encuentra o establece una conexión, un error de nivel E_WARNING es generado.
http://php.net/manual/es/function.mysql-query.php

mysql y mysqli son 2 API diferentes, no las mezcles.

La extensión mysql de PHP quedará obsoleta a partir de PHP 5.5.0 y no se recomienda para nuevos desarrollos.

Más info: http://php.net/manual/es/mysqlinfo.api.choosing.php

Reporto para que lo muevan a PHP.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 19/01/2013, 15:51
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Muchas gracias Andrés por tu pronta respuesta.

¿Tu qué api usas en nuevos desarrollos para conectarse a mysql? ¿Cuál recomiendas?


Por otra parte tengo una duda, en las páginas del manual http://php.net/manual/es/mysqli.construct.php http://php.net/manual/es/mysqli.options.php etc. aparece 2 partes, estilos orientados a objetos y procedimientos. ¿Cuál es la diferencia?

Cita:
Estilo orientado a objetos
mysqli::__construct() ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )

Estilo por procedimientos
mysqli mysqli_connect ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )

Abre una conexión al Servidor MySQL Server sobre el que se ejecuta.
Cita:
Estilo orientado a objetos
bool mysqli::options ( int $option , mixed $value )

Estilo por procedimientos
bool mysqli_options ( mysqli $link , int $option , mixed $value )

Se usa para establecer opciones extra y para modificar al comportamiento de una conexión.

Se puede llamar varias veces a esta función para establecer varias opciones

Graciassss
  #4 (permalink)  
Antiguo 19/01/2013, 16:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Dudas consultas mysql con php

En una se usan clases, métodos y atributos con todas las ventajas de la programación oriendada a objetos. En la otra forma se usan funciones. Con PDO puedes usar más de 10 drivers diferentes (mysql, postgreSQL, oracle, SQLite etc) con mysqli sólo Mysql. Si todavía no manejas programación orientada a objetos, puedes usar mysqli.

PDO: orientado a objetos
mysqli: orientado a objetos o por procedimientos

Lo importante es ir dejando a un lado la extensión mysql_*

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 19/01/2013, 18:06
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Buenassss

Gracias de nuevo pero ¿me podrías explicar la diferencia entre objetos y procedimientos? Tu como experto, ¿Qué usas? ¿Objetos o procedimientos? ¿PDO o mysqli?

Estoy buscando por google, wikipedia, etc. pero la verdad serán las horas y que ya es tarde en España pero no me aclaro :(

Graciasss
  #6 (permalink)  
Antiguo 20/01/2013, 01:13
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: Dudas consultas mysql con php

que tal si cuelgan en el foro principal donde encontrar información sobre PDO... y si ya esta me la dejon saber por favor
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #7 (permalink)  
Antiguo 20/01/2013, 18:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

En el foro al inicio esta el anuncio: http://www.forosdelweb.com/f18/anunc...ecada-1008145/
  #8 (permalink)  
Antiguo 20/01/2013, 19:12
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

muchas gracias pero entre mysqli o PDO ¿Cuál recomiendas?

Otro tema para evitar el tema de SQL injection attack, ¿qué se recomienda entre ambas librerías? ¿Cuál es más segura?
  #9 (permalink)  
Antiguo 20/01/2013, 19:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Lo mejor es consultas preparadas y ambas te brindan esa posibilidad.

Revisa este link http://php.net/manual/en/mysqlinfo.api.choosing.php para que elijas la que más se adecua a tus necesidades.

Saludos.
  #10 (permalink)  
Antiguo 20/01/2013, 20:17
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Muchas gracias GatorV

Acabo de ver esta págian http://php.net/manual/es/mysqli.quic...statements.php y dice que las sentencias preparadas consumen más recursos del servidor... ¿Es correcto?


Cita:
Viajes de ida y vuelta desde el cliente al servidor, SELECT, ejecución única 2 1
Cadenas de sentencias tranferidas desde el cliente al servidor 1 1
Viajes de ida y vuelta desde el cliente al servidor, SELECT, ejecución repetida (n) 1 + n n
Cadenas de sentencias tranferidas desde el cliente al servidor 1 plantilla, n veces parametro vinculado, si existe n veces junto con el parámetro, si existe
  #11 (permalink)  
Antiguo 20/01/2013, 21:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

De hecho no, ya que el parseo del SQL se hace solamente una vez, por lo que si vas a realizar varias veces el mismo Query pero con diferentes parámetros, es mucho más óptimo usar Consultas Preparadas.

Saludos.
  #12 (permalink)  
Antiguo 21/01/2013, 01:23
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Y con las consultas preparadas, podré estar tranquilo del tema SQL injection attack??? Tengo que limpiar los datos o no me hará falta?


He leído la función filter_var que antes no estaba. ¿Se recomienda usarla? o con strip_tags es suficiente?


Graciasss
  #13 (permalink)  
Antiguo 21/01/2013, 11:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Así es, usando consultas preparadas te evitas cualquier SQL Injection, ya que los parámetros se envían por aparte de la consulta.

Siempre tienes que limpiar los datos, es una regla ya que el único ataque no es SQL Injection, también pueden hacerte XSS, recuerda la regla de "oro", NUNCA confies en los datos que vienen del usuario, siempre valida y limpia.

Saludos.
  #14 (permalink)  
Antiguo 21/01/2013, 12:31
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Y para limpiar los datos, ¿qué funciones recomiendas? filter_var?? u otras??
  #15 (permalink)  
Antiguo 21/01/2013, 12:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Pues es que no hay una función genérica para todo, todo depende del contexto con lo que lo quieras usar, y que tipos de datos quieras, no puedes filtrar de la misma manera un número, que una cadena de texto o una URL...

Tienes que aplicar el filtro que requiera el tipo de dato.

Saludos.
  #16 (permalink)  
Antiguo 21/01/2013, 21:07
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

tu como experto, ¿qué función usas para texto? ¿Y para números?


Estoy decidiento entre usar PDO y mysqli y tengo una duda, ¿PDO me valdría para bases de datos no relacionales/NoSQL como Amazon SimpleDB, MongoDB, CouchDB o Cassandra?

¿Hay alguna forma de que como tengo que revisar todo el código, tener algo que me valga para cualquier tipo de base de datos?


Graciassss
  #17 (permalink)  
Antiguo 21/01/2013, 22:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

No, PDO solo funciona para bases de datos relacionas, revisa en el manual los drivers que te brinda.

Recuerda que las bases de datos NoSQL precisamente son eso, de NO SQL, y PDO solo funciona para bases de datos SQL. Son dos paradigmas totalmente diferentes.

Saludos.
  #18 (permalink)  
Antiguo 21/01/2013, 23:48
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

Y por curiosidad, NoSQL no tiene algo como PDO que funcione para varios tipos de bases de datos???
  #19 (permalink)  
Antiguo 22/01/2013, 10:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Que yo sepa no, pero sería cuestión que buscaras, PDO es una extensión del nucleo de PHP, igual puedes buscar y a lo mejor una librería desarrollada en PHP.

Saludos.
  #20 (permalink)  
Antiguo 22/01/2013, 14:03
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

ok muchas gracias ;) por cierto tu en tus proyectos que usas PDO o mysqli???
  #21 (permalink)  
Antiguo 22/01/2013, 14:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Casi siempre PDO, pero si requiero algo específico de MySQL uso MySQLi.

Saludos.
  #22 (permalink)  
Antiguo 22/01/2013, 14:19
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

y por qué PDO??? Dicen que mysqli tiene mayor rendimiento...
  #23 (permalink)  
Antiguo 22/01/2013, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Porque no siempre uso MySQL.
  #24 (permalink)  
Antiguo 22/01/2013, 14:59
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

sólo por eso?? y si sabes que sólo usarás mysql como motor, segurías usando PDO u optarías por PDO???
  #25 (permalink)  
Antiguo 22/01/2013, 15:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Claro, no puedes usar MySQLi si vas a usar Oracle o MSSQL Server, MySQLi solo sirve para MySQL.

En concreto no uso una fija, siempre uso Zend Framework que trae un DB Abstraction Layer, por lo que solo es ajustar el driver correcto, así que no me preocupo mucho por cual de los dos usar, como te comenté anteriormente, si voy a usar algo específico de MySQL que no me brinda PDO, uso MySQLi pero a travez de mi DBAL.

Saludos.
  #26 (permalink)  
Antiguo 22/01/2013, 15:44
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

okok una cosa yo vengo utilizando mysql_real_escape_string para limpiar datos. Necesitaré usar los equivalentes mysqli_real_escape_string() PDO::quote() si uso mysqli o PDO?
  #27 (permalink)  
Antiguo 22/01/2013, 15:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Dudas consultas mysql con php

Lo mejor es usar consultas preparadas para escapar tus datos, así te evitas cualquier problema, de lo contrario sí, vas a tener que usar alguna de las que comentas para escapar tu string y evitar cualquier problema de SQL.
  #28 (permalink)  
Antiguo 23/01/2013, 14:07
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 99
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas consultas mysql con php

muchas gracias por todo ;)

Etiquetas: dudas, mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:38.